1 package org.coolreader.crengine; 2 3 import android.content.ActivityNotFoundException; 4 import android.content.Intent; 5 import android.net.Uri; 6 import android.util.Log; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.widget.Button; 10 import android.widget.TabHost; 11 import android.widget.TabHost.TabContentFactory; 12 import android.widget.TextView; 13 14 import org.coolreader.CoolReader; 15 import org.coolreader.R; 16 17 import java.util.ArrayList; 18 import java.util.Iterator; 19 import java.util.Random; 20 21 public class AboutDialog extends BaseDialog implements TabContentFactory { 22 final CoolReader mCoolReader; 23 24 private View mAppTab; 25 private View mDirsTab; 26 private View mLicenseTab; 27 private View mDonationTab; 28 isPackageInstalled( String packageName )29 private boolean isPackageInstalled( String packageName ) { 30 try { 31 mCoolReader.getPackageManager().getApplicationInfo(packageName, 0); 32 return true; 33 } catch ( Exception e ) { 34 return false; 35 } 36 } 37 installPackage( String packageName )38 private void installPackage( String packageName ) { 39 Log.i("cr3", "installPackageL " + packageName); 40 try { 41 mCoolReader.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName))); 42 } catch ( ActivityNotFoundException e ) { 43 mCoolReader.showToast("Cannot run Android Market application"); 44 } 45 } 46 setupDonationButton( final Button btn, final String packageName )47 private void setupDonationButton( final Button btn, final String packageName ) { 48 if ( isPackageInstalled(packageName)) { 49 btn.setEnabled(false); 50 btn.setText(R.string.dlg_about_donation_installed); 51 } else { 52 btn.setOnClickListener(v -> installPackage(packageName)); 53 } 54 } 55 setupInAppDonationButton( final Button btn, final double amount )56 private void setupInAppDonationButton( final Button btn, final double amount ) { 57 btn.setText("$" + amount); 58 btn.setOnClickListener(v -> mCoolReader.makeDonation(amount)); 59 } 60 updateTotalDonations()61 private void updateTotalDonations() { 62 double amount = mCoolReader.getTotalDonations(); 63 if (isPackageInstalled("org.coolreader.donation.gold")) 64 amount += 10.0; 65 if (isPackageInstalled("org.coolreader.donation.silver")) 66 amount += 3.0; 67 if (isPackageInstalled("org.coolreader.donation.bronze")) 68 amount += 1.0; 69 TextView text = ((TextView)mDonationTab.findViewById(R.id.btn_about_donation_total)); 70 if (text != null) 71 text.setText(mCoolReader.getString(R.string.dlg_about_donation_total) + " $" + amount); 72 } 73 AboutDialog( CoolReader activity)74 public AboutDialog( CoolReader activity) 75 { 76 super(activity); 77 mCoolReader = activity; 78 79 setTitle(R.string.dlg_about); 80 LayoutInflater inflater = LayoutInflater.from(getContext()); 81 TabHost tabs = (TabHost)inflater.inflate(R.layout.about_dialog, null); 82 mAppTab = inflater.inflate(R.layout.about_dialog_app, null); 83 ((TextView)mAppTab.findViewById(R.id.version)).setText("Cool Reader " + mCoolReader.getVersion()); 84 85 mDirsTab = inflater.inflate(R.layout.about_dialog_dirs, null); 86 TextView fonts_dir = mDirsTab.findViewById(R.id.fonts_dirs); 87 88 ArrayList<String> fontsDirs = Engine.getFontsDirs(); 89 StringBuilder sbuf = new StringBuilder(); 90 Iterator<String> it = fontsDirs.iterator(); 91 while (it.hasNext()) { 92 String s = it.next(); 93 sbuf.append(s); 94 if (it.hasNext()) { 95 sbuf.append("\n"); 96 } 97 } 98 fonts_dir.setText(sbuf.toString()); 99 100 ArrayList<String> testuresDirs = Engine.getDataDirs(Engine.DataDirType.TexturesDirs); 101 sbuf = new StringBuilder(); 102 it = testuresDirs.iterator(); 103 while (it.hasNext()) { 104 String s = it.next(); 105 sbuf.append(s); 106 if (it.hasNext()) { 107 sbuf.append("\n"); 108 } 109 } 110 TextView textures_dir = mDirsTab.findViewById(R.id.textures_dirs); 111 textures_dir.setText(sbuf.toString()); 112 113 ArrayList<String> backgroundsDirs = Engine.getDataDirs(Engine.DataDirType.BackgroundsDirs); 114 sbuf = new StringBuilder(); 115 it = backgroundsDirs.iterator(); 116 while (it.hasNext()) { 117 String s = it.next(); 118 sbuf.append(s); 119 if (it.hasNext()) { 120 sbuf.append("\n"); 121 } 122 } 123 TextView backgrounds_dir = mDirsTab.findViewById(R.id.backgrounds_dirs); 124 backgrounds_dir.setText(sbuf.toString()); 125 126 ArrayList<String> hyphDirs = Engine.getDataDirs(Engine.DataDirType.HyphsDirs); 127 sbuf = new StringBuilder(); 128 it = hyphDirs.iterator(); 129 while (it.hasNext()) { 130 String s = it.next(); 131 sbuf.append(s); 132 if (it.hasNext()) { 133 sbuf.append("\n"); 134 } 135 } 136 TextView hyph_dir = mDirsTab.findViewById(R.id.hyph_dirs); 137 hyph_dir.setText(sbuf.toString()); 138 139 mLicenseTab = inflater.inflate(R.layout.about_dialog_license, null); 140 String license = Engine.getInstance(mCoolReader).loadResourceUtf8(R.raw.license); 141 ((TextView)mLicenseTab.findViewById(R.id.license)).setText(license); 142 boolean billingSupported = mCoolReader.isDonationSupported(); 143 mDonationTab = inflater.inflate(billingSupported ? R.layout.about_dialog_donation2 : R.layout.about_dialog_donation, null); 144 145 if (billingSupported) { 146 setupInAppDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_vip), 100); 147 setupInAppDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_platinum), 30); 148 setupInAppDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_gold), 10); 149 setupInAppDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_silver), 3); 150 setupInAppDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_bronze), 1); 151 setupInAppDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_iron), 0.3); 152 updateTotalDonations(); 153 mCoolReader.setDonationListener(total -> updateTotalDonations()); 154 setOnDismissListener(dialog -> mCoolReader.setDonationListener(null)); 155 } else { 156 setupDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_gold), "org.coolreader.donation.gold"); 157 setupDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_silver), "org.coolreader.donation.silver"); 158 setupDonationButton(mDonationTab.findViewById(R.id.btn_about_donation_install_bronze), "org.coolreader.donation.bronze"); 159 } 160 161 tabs.setup(); 162 TabHost.TabSpec tsApp = tabs.newTabSpec("App"); 163 tsApp.setIndicator("", 164 getContext().getResources().getDrawable(R.drawable.cr3_menu_link)); 165 tsApp.setContent(this); 166 tabs.addTab(tsApp); 167 168 TabHost.TabSpec tsDirectories = tabs.newTabSpec("Directories"); 169 tsDirectories.setIndicator("", 170 getContext().getResources().getDrawable(R.drawable.ic_menu_archive)); 171 tsDirectories.setContent(this); 172 tabs.addTab(tsDirectories); 173 174 TabHost.TabSpec tsLicense = tabs.newTabSpec("License"); 175 tsLicense.setIndicator("", 176 getContext().getResources().getDrawable(R.drawable.ic_menu_star)); 177 tsLicense.setContent(this); 178 tabs.addTab(tsLicense); 179 180 TabHost.TabSpec tsDonation = tabs.newTabSpec("Donation"); 181 tsDonation.setIndicator("", 182 getContext().getResources().getDrawable(R.drawable.ic_menu_emoticons)); 183 tsDonation.setContent(this); 184 tabs.addTab(tsDonation); 185 186 setView( tabs ); 187 188 // 25% chance to show Donations tab 189 if ((rnd.nextInt() & 3) == 3) 190 tabs.setCurrentTab(3); 191 192 } 193 private static Random rnd = new Random(android.os.SystemClock.uptimeMillis()); 194 195 196 @Override createTabContent(String tag)197 public View createTabContent(String tag) { 198 199 if ( "App".equals(tag) ) 200 return mAppTab; 201 else if ( "Directories".equals(tag) ) 202 return mDirsTab; 203 else if ( "License".equals(tag) ) 204 return mLicenseTab; 205 else if ( "Donation".equals(tag) ) 206 return mDonationTab; 207 return null; 208 } 209 210 } 211