/* * Copyright 2015. Appsi Mobile * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.appsimobile.appsii.promo; import android.app.Activity; import android.app.DialogFragment; import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.Signature; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.appsimobile.appsii.AnalyticsManager; import com.appsimobile.appsii.PageHelper; import com.appsimobile.appsii.R; import com.appsimobile.appsii.dagger.AppInjector; import com.appsimobile.appsii.iab.FeatureManager; import com.appsimobile.appsii.iab.FeatureManagerHelper; import com.appsimobile.appsii.module.home.provider.HomeContract; import com.appsimobile.appsii.preference.ObfuscatedPreferences; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.inject.Inject; /** * Created by nick on 01/02/15. */ public class PromoUnlockFragment extends DialogFragment implements View.OnClickListener { @Inject AnalyticsManager mAnalyticsManager; // AsyncQueryHandlerImpl mAsyncQueryHandler; ProgressBar mProgressBar; TextView mAgendaView; TextView mSettingsView; TextView mCallsView; TextView mPeopleView; TextView mSmsView; TextView mPowerPackView; Button mDownloadLink; /** * This fragment is used to retain the active license checker, even on orientation * changes. */ LicenseCheckerFragment mLicenseCheckerFragment; UnlockListener mUnlockListener; @Inject FeatureManagerHelper mFeatureManagerHelper; @Inject ObfuscatedPreferences mObfuscatedPreferences; public PromoUnlockFragment() { setStyle(STYLE_NO_TITLE, 0); } static String getCertificateFingerPrint(Context context, String packageName) throws PackageManager.NameNotFoundException { PackageManager pm = context.getPackageManager(); Signature sig = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures[0]; try { return doFingerprint(sig.toByteArray(), "SHA1"); } catch (NoSuchAlgorithmException e) { // can't happen on an android device. return null; } } protected static String doFingerprint(byte[] certificateBytes, String algorithm) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance(algorithm); md.update(certificateBytes); byte[] digest = md.digest(); String toRet = ""; for (int i = 0; i < digest.length; i++) { if (i != 0) { toRet += ":"; } int b = digest[i] & 0xff; String hex = Integer.toHexString(b); if (hex.length() == 1) { toRet += "0"; } toRet += hex; } return toRet; } // generate a hash public static String sha256(String in) { try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); digest.update(in.getBytes("UTF-8")); return bytesToHexString(digest.digest()); } catch (NoSuchAlgorithmException | UnsupportedEncodingException e1) { return null; } } // utility function private static String bytesToHexString(byte[] bytes) { // http://stackoverflow.com/questions/332079 StringBuffer sb = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(0xFF & bytes[i]); if (hex.length() == 1) { sb.append('0'); } sb.append(hex); } return sb.toString(); } // generate a hash public static String sha1(String in) { try { MessageDigest digest = MessageDigest.getInstance("SHA-1"); digest.update(in.getBytes("UTF-8")); return bytesToHexString(digest.digest()); } catch (NoSuchAlgorithmException | UnsupportedEncodingException e1) { return null; } } public void setUnlockListener(UnlockListener unlockListener) { mUnlockListener = unlockListener; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AppInjector.inject(this); mLicenseCheckerFragment = (LicenseCheckerFragment) getFragmentManager().findFragmentByTag("checker"); if (mLicenseCheckerFragment == null) { mLicenseCheckerFragment = new LicenseCheckerFragment(); getFragmentManager().beginTransaction() .add(mLicenseCheckerFragment, "checker") .commit(); } } @Override public void onStart() { super.onStart(); } @Override public void onStop() { super.onStop(); if (getActivity().isFinishing()) { getFragmentManager().beginTransaction().remove(mLicenseCheckerFragment).commit(); } } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.download_apks: onDownloadApksClicked(); break; case R.id.agenda_unlocked: startAgendaCheck(); break; case R.id.calls_unlocked: startCallsCheck(); break; case R.id.sms_unlocked: startSmsCheck(); break; case R.id.settings_unlocked: startSettingsCheck(); break; case R.id.contacts_unlocked: startPeopleCheck(); break; case R.id.powerpack_unlocked: startPowerPackCheck(); break; } } private void onDownloadApksClicked() { Intent intent = new Intent(Intent.ACTION_VIEW); String url = getString(R.string.url_unlock_apks); intent.setData(Uri.parse(url)); startActivity(intent); } private void startAgendaCheck() { if (mFeatureManagerHelper.legacyAgendaUnlocked(getActivity())) { Toast.makeText(getActivity(), R.string.already_unlocked, Toast.LENGTH_SHORT).show(); return; } if (!mLicenseCheckerFragment.isCheckInProgress()) { if (mLicenseCheckerFragment.startCheck( new AgendaLicenseCheckerImpl(getActivity(), mObfuscatedPreferences))) { setCheckInProgress(true); } } } private void startCallsCheck() { if (mFeatureManagerHelper.legacyCallsUnlocked(getActivity())) { Toast.makeText(getActivity(), R.string.already_unlocked, Toast.LENGTH_SHORT).show(); return; } if (!mLicenseCheckerFragment.isCheckInProgress()) { if (mLicenseCheckerFragment.startCheck( new CallsLicenseCheckerImpl(getActivity(), mObfuscatedPreferences))) { setCheckInProgress(true); } } } private void startSmsCheck() { if (mFeatureManagerHelper.legacySmsUnlocked(getActivity())) { Toast.makeText(getActivity(), R.string.already_unlocked, Toast.LENGTH_SHORT).show(); return; } if (!mLicenseCheckerFragment.isCheckInProgress()) { if (mLicenseCheckerFragment.startCheck( new SmsLicenseCheckerImpl(getActivity(), mObfuscatedPreferences))) { setCheckInProgress(true); } } } private void startSettingsCheck() { if (mFeatureManagerHelper.legacySettingsUnlocked(getActivity())) { Toast.makeText(getActivity(), R.string.already_unlocked, Toast.LENGTH_SHORT).show(); return; } if (!mLicenseCheckerFragment.isCheckInProgress()) { if (mLicenseCheckerFragment.startCheck( new SettingsLicenseCheckerImpl(getActivity(), mObfuscatedPreferences))) { setCheckInProgress(true); } } } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_promo_unlock, container, false); } private void startPeopleCheck() { if (mFeatureManagerHelper.legacyPeopleUnlocked(getActivity())) { Toast.makeText(getActivity(), R.string.already_unlocked, Toast.LENGTH_SHORT).show(); return; } if (!mLicenseCheckerFragment.isCheckInProgress()) { if (mLicenseCheckerFragment.startCheck( new ContactsLicenseCheckerImpl(getActivity(), mObfuscatedPreferences))) { setCheckInProgress(true); } } } private void startPowerPackCheck() { if (mFeatureManagerHelper.legacyPowerPackUnlocked(getActivity())) { Toast.makeText(getActivity(), R.string.already_unlocked, Toast.LENGTH_SHORT).show(); return; } if (!mLicenseCheckerFragment.isCheckInProgress()) { if (mLicenseCheckerFragment.startCheck( new PowerPackLicenseCheckerImpl(getActivity(), mObfuscatedPreferences))) { setCheckInProgress(true); } } } void setCheckInProgress(boolean inProgress) { mProgressBar.setVisibility(inProgress ? View.VISIBLE : View.INVISIBLE); mAgendaView.setEnabled(!inProgress); mCallsView.setEnabled(!inProgress); mSmsView.setEnabled(!inProgress); mSettingsView.setEnabled(!inProgress); mPeopleView.setEnabled(!inProgress); mPowerPackView.setEnabled(!inProgress); } void markAgendaUnlocked() { mAgendaView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mProgressBar = (ProgressBar) view.findViewById(R.id.progress_bar); mAgendaView = (TextView) view.findViewById(R.id.agenda_unlocked); mCallsView = (TextView) view.findViewById(R.id.calls_unlocked); mSmsView = (TextView) view.findViewById(R.id.sms_unlocked); mSettingsView = (TextView) view.findViewById(R.id.settings_unlocked); mPeopleView = (TextView) view.findViewById(R.id.contacts_unlocked); mPowerPackView = (TextView) view.findViewById(R.id.powerpack_unlocked); mDownloadLink = (Button) view.findViewById(R.id.download_apks); mAgendaView.setOnClickListener(this); mCallsView.setOnClickListener(this); mSmsView.setOnClickListener(this); mSettingsView.setOnClickListener(this); mPeopleView.setOnClickListener(this); mPowerPackView.setOnClickListener(this); mDownloadLink.setOnClickListener(this); if (mFeatureManagerHelper.legacyAgendaUnlocked(getActivity())) { mAgendaView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } if (mFeatureManagerHelper.legacyCallsUnlocked(getActivity())) { mCallsView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } if (mFeatureManagerHelper.legacySmsUnlocked(getActivity())) { mSmsView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } if (mFeatureManagerHelper.legacySettingsUnlocked(getActivity())) { mSettingsView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } if (mFeatureManagerHelper.legacyPeopleUnlocked(getActivity())) { mPeopleView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } if (mFeatureManagerHelper.legacyPowerPackUnlocked(getActivity())) { mPowerPackView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } } void markPowerPackUnlocked() { mPowerPackView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } void markSettingsUnlocked() { mSettingsView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } void markContactsUnlocked() { mPeopleView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } void markCallsUnlocked() { mCallsView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } void markSmsUnlocked() { mSmsView.setCompoundDrawablesRelativeWithIntrinsicBounds( R.drawable.ic_lock_open_black_24dp, 0, 0, 0); } public void onLicenseCheckComplete() { mLicenseCheckerFragment.clear(); setCheckInProgress(false); if (mUnlockListener != null) { mUnlockListener.onAppsiPluginUnlocked(); } } @Override public void onResume() { super.onResume(); if (mLicenseCheckerFragment.isCheckInProgress()) { setCheckInProgress(true); } } interface UnlockListener { void onAppsiPluginUnlocked(); } // // static class AsyncQueryHandlerImpl extends AsyncQueryHandler { // // final Context mContext; // // public AsyncQueryHandlerImpl(Context context, ContentResolver cr) { // super(cr); // mContext = context; // } // // public void ensurePageEnabled(int pageType) { // startQuery(1, pageType, // HomeContract.Pages.CONTENT_URI, // new String[]{HomeContract.Pages._ID}, // HomeContract.Pages.TYPE + "=?", // new String[]{String.valueOf(pageType)}, // null // ); // } // // @Override // protected void onQueryComplete(int token, Object cookie, Cursor cursor) { // int pageType = (int) cookie; // int count = cursor.getCount(); // cursor.close(); // if (count == 0) { // enablePage(pageType); // } // } // // public void enablePage(int pageType) { // ContentValues values = new ContentValues(); // String displayName = getTitleForPageType(pageType); // // values.put(HomeContract.Pages.TYPE, pageType); // values.put(HomeContract.Pages.DISPLAY_NAME, displayName); // // startInsert(0, null, HomeContract.Pages.CONTENT_URI, values); // } // // private String getTitleForPageType(int pageType) { // int resId; // switch (pageType) { // case HomeContract.Pages.PAGE_SETTINGS: // resId = R.string.settings_page_name; // break; // case HomeContract.Pages.PAGE_SMS: // resId = R.string.sms_page_name; // break; // case HomeContract.Pages.PAGE_AGENDA: // resId = R.string.agenda_page_name; // break; // case HomeContract.Pages.PAGE_CALLS: // resId = R.string.calls_page_name; // break; // case HomeContract.Pages.PAGE_PEOPLE: // resId = R.string.people_page_name; // break; // default: // return null; // } // return mContext.getString(resId); // } // } public static class LicenseCheckerFragment extends Fragment { LicenseChecker mActiveLicenseChecker; AsyncTask<?, ?, ?> mTask; boolean isCheckInProgress() { return mActiveLicenseChecker != null; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } /** * Starts the check. Returns false if the plugin is not installed */ public boolean startCheck(LicenseChecker licenseChecker) { mActiveLicenseChecker = licenseChecker; mTask = licenseChecker.checkAccess(); if (mTask == null) { mActiveLicenseChecker = null; return false; } return true; } public void clear() { mActiveLicenseChecker = null; mTask = null; } @Override public void onDestroy() { super.onDestroy(); if (mTask != null) { mTask.cancel(true); } } } class AgendaLicenseCheckerImpl extends LicenseChecker { @SuppressWarnings("SpellCheckingInspection") static final String CALENDAR_KEY = // SHA-256 of the key "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApsqS2yG4ZcX7pEtfUhhT7pZf" + "hDM2ABaa/24Z8moaqAkyPhxx143kvT/4BgIiucqN+4XUHFORKQkWqGcwf9VE" + "gEnQf8JksH+xfNJrzGXcV8XLpjoE5uH5slVYnjs00cWQDuCDwwd/Qyw6mHes" + "Yh7T4kE+Wyb7lellowQUNg4qxN2xfHEXu/Hv6ZYrYUmzsxjx50iJZn7l+q9s" + "tRW4k5IxK8ytKIX5ocN5gzk4dLOvdZ+e299qayOebkub3tJaLJlZXXjE5evG" + "tjZlBxDsqT3WK1L+gyIgAHrwOB/87peoZiLjlM5CNngykHVASx6QN16rf+ew" + "KWZeohypIIu6mCJPPQIDAQAB"; protected AgendaLicenseCheckerImpl(Activity context, ObfuscatedPreferences obfuscatedPreferences) { super(context, "com.appsimobile.appsicalendar", CALENDAR_KEY, FeatureManager.AGENDA_FEATURE, obfuscatedPreferences); } @Override protected void onCheckComplete(String packageName) { if (mFeatureManagerHelper.legacyAgendaUnlocked(mContext)) { PageHelper pageHelper = PageHelper.getInstance(getActivity()); pageHelper.enablePageAccess( HomeContract.Pages.PAGE_AGENDA, false /* do not force add */); markAgendaUnlocked(); Toast.makeText(mContext, R.string.unlock_success, Toast.LENGTH_SHORT).show(); mAnalyticsManager.trackAppsiEvent(AnalyticsManager.ACTION_APPSI_UNLOCK, AnalyticsManager.CATEGORY_PAGES, packageName); } else { Toast.makeText(mContext, R.string.unlock_error, Toast.LENGTH_SHORT).show(); } onLicenseCheckComplete(); } } class PowerPackLicenseCheckerImpl extends LicenseChecker { @SuppressWarnings("SpellCheckingInspection") static final String POWER_PACK_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqaTU3L//VwvEU78IKXmCAJfcTw28E4nn" + "AzY0tRG9x+aZKkBk6f4pkvcbN1WuT4y4hWrTfEJmaP/hfvRiK6J802SNcTwBe8/du6ZY" + "fdsJ1d83EQ5Hu2Q/jhRqhD332np1/IvjXkCD3AU1NgvGiBRdMN5iPYmzWluIfTSEeGjS" + "CiCDXEQdHiS+1TUOk0y6WBiVuhXJ+GINhQWJZY5V84yrnv7ooQc+MrE8ieT0KcHpHrQC" + "8W/3JvXHxrmX2728Z7l7fsFiCCgbV3IIw9Lxo6AAhAUbwv8MqVSdXqUMqG3dhMHmXyW1" + "/xiPt5BKrGBTTNPkwCC5jFka8tr3yAJQIHsy9QIDAQAB"; protected PowerPackLicenseCheckerImpl(Activity context, ObfuscatedPreferences obfuscatedPreferences) { super(context, "com.appsimobile.appsipowerpack", POWER_PACK_KEY, FeatureManager.SETTINGS_AGENDA_FEATURE, obfuscatedPreferences); } @Override protected void onCheckComplete(String packageName) { if (mFeatureManagerHelper.legacyPowerPackUnlocked(mContext)) { PageHelper pageHelper = PageHelper.getInstance(getActivity()); pageHelper.enablePageAccess(HomeContract.Pages.PAGE_AGENDA, false /* force */); pageHelper.enablePageAccess(HomeContract.Pages.PAGE_SETTINGS, false /* force */); markPowerPackUnlocked(); Toast.makeText(mContext, R.string.unlock_success, Toast.LENGTH_SHORT).show(); mAnalyticsManager.trackAppsiEvent(AnalyticsManager.ACTION_APPSI_UNLOCK, AnalyticsManager.CATEGORY_PAGES, packageName); } else { Toast.makeText(mContext, R.string.unlock_error, Toast.LENGTH_SHORT).show(); } onLicenseCheckComplete(); } } class SettingsLicenseCheckerImpl extends LicenseChecker { @SuppressWarnings("SpellCheckingInspection") static final String SETTINGS_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjDUgBBwfK5C6FEjoq58Hrx6VJlq05X" + "ssk8mfo24E9srsC39Pna0jl0146EisBoVFlvj79XGmsDB43ilXbKFb8an5pzhwU3pf" + "G+d9OewIe75Fkg+bSn86eDXpHxNWs+NT0oAM9NMBbn0DYSDbuVg73yJryRJ/R7jSVS" + "PxFEasBBtRmdPjtDDLZ6hKPgicQogrq6CRE1zmUkgUKze/OWL6sl6ip5RKjZS2sw7U" + "HSUk09ZsTw1oGPPQRnvVUw+dDaC462GqcHwDIWyhRSRNE4iIHMUbBFG1eFKWeVtKDK" + "WX4ZVkqmchZg7tAbWzjxg2eC1EofrmVRIu5eiw/vVBH1cVuQIDAQAB"; protected SettingsLicenseCheckerImpl(Activity context, ObfuscatedPreferences obfuscatedPreferences) { super(context, "com.appsimobile.appsisettings", SETTINGS_KEY, FeatureManager.SETTINGS_FEATURE, obfuscatedPreferences); } @Override protected void onCheckComplete(String packageName) { if (mFeatureManagerHelper.legacySettingsUnlocked(mContext)) { PageHelper pageHelper = PageHelper.getInstance(getActivity()); pageHelper.enablePageAccess(HomeContract.Pages.PAGE_SETTINGS, false /* force */); markSettingsUnlocked(); Toast.makeText(mContext, R.string.unlock_success, Toast.LENGTH_SHORT).show(); mAnalyticsManager.trackAppsiEvent(AnalyticsManager.ACTION_APPSI_UNLOCK, AnalyticsManager.CATEGORY_PAGES, packageName); } else { Toast.makeText(mContext, R.string.unlock_error, Toast.LENGTH_SHORT).show(); } onLicenseCheckComplete(); } } class ContactsLicenseCheckerImpl extends LicenseChecker { @SuppressWarnings("SpellCheckingInspection") static final String CONTACTS_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuMwfPu2tw4ONCpWc3P9u0FQjrg8Y" + "yx9sNQHWUtBDxyeYw2zv/8eAWBEUsaeIwTy6m75Xk/+11+1cItm5aIFQe4yhI8Cj" + "tIfrtuiYHrcVCpf/FR60S1KileOP8H6BmFro+JH+j17hfbwks+ijuVxDCVMy/ZG/" + "avRTGMnrL8+Zm6l+AYTUv3e9EH2UfXAQmo2KTk8KwoyFe9kGHQ19C/0Kgis0zltf" + "aiEILy1NErm7XKrrUUnP4IGJT2LWyn66LW/20hTUefpIRV/dA1s77ZV79wkZ8Beb" + "K7mPvF7IWvNUjNuz1t1jhj7rqzK6NebQKGJYtV0LqUU4ePyn9hnunYWWGwIDAQAB"; protected ContactsLicenseCheckerImpl(Activity context, ObfuscatedPreferences obfuscatedPreferences) { super(context, "com.appsimobile.appsicontacts", CONTACTS_KEY, FeatureManager.PEOPLE_FEATURE, obfuscatedPreferences); } @Override protected void onCheckComplete(String packageName) { if (mFeatureManagerHelper.legacyPeopleUnlocked(mContext)) { PageHelper pageHelper = PageHelper.getInstance(getActivity()); pageHelper.enablePageAccess(HomeContract.Pages.PAGE_PEOPLE, false /* force */); markContactsUnlocked(); Toast.makeText(mContext, R.string.unlock_success, Toast.LENGTH_SHORT).show(); mAnalyticsManager.trackAppsiEvent(AnalyticsManager.ACTION_APPSI_UNLOCK, AnalyticsManager.CATEGORY_PAGES, packageName); } else { Toast.makeText(mContext, R.string.unlock_error, Toast.LENGTH_SHORT).show(); } onLicenseCheckComplete(); } } class CallsLicenseCheckerImpl extends LicenseChecker { @SuppressWarnings("SpellCheckingInspection") static final String CALLS_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhJeN9DkEssDXlhjce6tAsHufQMic" + "VAKZg+7lW5WJuQ4dNyZnnJoUcPDLFgteqGJTurjrbcgXHt1izytDF5ZkSlITCN5U" + "JV/sLw7X5nwLYohP0+faa4M4xLUVnKYdkDivIa3cvuPPNxQyWSUE7D8Of8p5j6Qm" + "j+6RNpQeQ/9uYrjAm3OEpcvFn7EtfEaXHvZpVAW2GxA1BfcJRCU0R+8hMNVue7M8" + "PjMv36MVNOlFR+ohdB1atb7kau89nT/PLSW+suGCMTVsdH0SoeNYjjnrJp2yXJYv" + "kxp7W8zQ5Ix/aso6fjIR9zmX6KPW4HT6Oopb/cqERb56HMSNtFSc7idklwIDAQAB"; protected CallsLicenseCheckerImpl(Activity context, ObfuscatedPreferences obfuscatedPreferences) { super(context, "com.appsimobile.appsicalls", CALLS_KEY, FeatureManager.CALLS_FEATURE, obfuscatedPreferences); } @Override protected void onCheckComplete(String packageName) { if (mFeatureManagerHelper.legacyCallsUnlocked(mContext)) { PageHelper pageHelper = PageHelper.getInstance(getActivity()); pageHelper.enablePageAccess(HomeContract.Pages.PAGE_CALLS, false /* force */); markCallsUnlocked(); Toast.makeText(mContext, R.string.unlock_success, Toast.LENGTH_SHORT).show(); mAnalyticsManager.trackAppsiEvent(AnalyticsManager.ACTION_APPSI_UNLOCK, AnalyticsManager.CATEGORY_PAGES, packageName); } else { Toast.makeText(mContext, R.string.unlock_error, Toast.LENGTH_SHORT).show(); } onLicenseCheckComplete(); } } class SmsLicenseCheckerImpl extends LicenseChecker { @SuppressWarnings("SpellCheckingInspection") static final String SMS_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgKMa1O3OA4Mc6JIkMrxGG4kq1xyR" + "KFwG/8tLUjAvv1IRmTbxiEp+EkfgXM/rMxKdbfh9/F7Z/J0wmwhOZgJ0JR5g9aWi" + "WoaJoYOaRBKi7bgMX+qALdJhiTLEvTcx982LajW1qWtq4GkbolU/eQUrOp0kyCV5" + "CeWEGL3E2nty1xypZoaOAyotk/uAaStZYdDYjP47DzyBoeLyeQMfDLT5i0LMadvd" + "y0sCjfUbO1yuuXOoCwPRGtDXGTzqfmNww2sYrz8Sc2bjcaJ0hPTYeOHasigb+FqI" + "+InV6DLbGecDklq5lzK3DqSudBh+FiPIPrO05Y1BK5QAYSf9swvjl7pHZQIDAQAB"; protected SmsLicenseCheckerImpl(Activity context, ObfuscatedPreferences obfuscatedPreferences) { super(context, "com.appsimobile.appsisms", SMS_KEY, FeatureManager.SMS_FEATURE, obfuscatedPreferences); } @Override protected void onCheckComplete(String packageName) { if (mFeatureManagerHelper.legacySmsUnlocked(mContext)) { PageHelper pageHelper = PageHelper.getInstance(getActivity()); pageHelper.enablePageAccess(HomeContract.Pages.PAGE_SMS, false /* force */); markSmsUnlocked(); Toast.makeText(mContext, R.string.unlock_success, Toast.LENGTH_SHORT).show(); mAnalyticsManager.trackAppsiEvent(AnalyticsManager.ACTION_APPSI_UNLOCK, AnalyticsManager.CATEGORY_PAGES, packageName); } else { Toast.makeText(mContext, R.string.unlock_error, Toast.LENGTH_SHORT).show(); } onLicenseCheckComplete(); } } }