Loading tests/SharedLibrary/lib/src/com/google/android/test/shared_library/SharedLibraryMain.java +30 −35 Original line number Diff line number Diff line Loading @@ -17,16 +17,14 @@ package com.google.android.test.shared_library; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.Fragment; import android.app.FragmentManager; import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Resources; public class SharedLibraryMain { private static String LIBRARY_PACKAGE = "com.google.android.test.shared_library"; static String LIBRARY_PACKAGE = "com.google.android.test.shared_library"; /** * Base version of the library. Loading @@ -38,6 +36,9 @@ public class SharedLibraryMain { */ public static int VERSION_SECOND = 2; /** * Return the version number of the currently installed library. */ public static int getVersion(Context context) { PackageInfo pi = null; try { Loading @@ -48,40 +49,34 @@ public class SharedLibraryMain { } } public static void ensureVersion(Activity activity, int minVersion) { /** * Check that the library's version is at least the given minimum version, * displaying a dialog to have the user install an update if that is not true. * The dialog is displayed as a DialogFragment in your activity if a newer * version is needed. If a newer version is needed, false is returned. */ public static boolean ensureVersion(final Activity activity, int minVersion) { final FragmentManager fm = activity.getFragmentManager(); final String dialogTag = LIBRARY_PACKAGE + ":version"; Fragment curDialog = fm.findFragmentByTag(dialogTag); if (getVersion(activity) >= minVersion) { return; // Library version is sufficient. Make sure any version dialog // we had shown is removed before returning. if (curDialog != null) { fm.beginTransaction().remove(curDialog).commitAllowingStateLoss(); } // The current version of the library does not meet the required version. Show // a dialog to inform the user and have them update to the current version. // Note that updating the library will be necessity mean killing the current // application (so it can be re-started with the new version, so there is no // reason to return a result here. final Context context; try { context = activity.createPackageContext(LIBRARY_PACKAGE, 0); } catch (PackageManager.NameNotFoundException e) { throw new IllegalStateException("Can't find my package!", e); return true; } // Display the dialog. Note that we don't need to deal with activity lifecycle // stuff because if the activity gets recreated, it will first call through to // ensureVersion(), causing us to either re-display the dialog if needed or let // it now proceed. final Resources res = context.getResources(); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(res.getText(R.string.upgrade_title)); builder.setMessage(res.getString(R.string.upgrade_body, activity.getApplicationInfo().loadLabel(activity.getPackageManager()), context.getApplicationInfo().loadLabel(context.getPackageManager()))); builder.setPositiveButton(res.getText(R.string.upgrade_button), new Dialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Launch play store. // The current version of the library does not meet the required version. // If we don't already have a version dialog displayed, display it now. if (curDialog == null) { curDialog = new VersionDialog(); fm.beginTransaction().add(curDialog, dialogTag).commitAllowingStateLoss(); } }); builder.show(); // Tell the caller that the current version is not sufficient. return false; } } tests/SharedLibrary/lib/src/com/google/android/test/shared_library/VersionDialog.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * 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.google.android.test.shared_library; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; /** * This is the dialog we show when the library's version is older than * the version the app needs. */ public class VersionDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Activity activity = getActivity(); // Need to use our library's resources for showing the dialog. final Context context; try { context = activity.createPackageContext(SharedLibraryMain.LIBRARY_PACKAGE, 0); } catch (PackageManager.NameNotFoundException e) { throw new IllegalStateException("Can't find my package!", e); } final Resources res = context.getResources(); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(res.getText(R.string.upgrade_title)); builder.setMessage(res.getString(R.string.upgrade_body, activity.getApplicationInfo().loadLabel(activity.getPackageManager()), context.getApplicationInfo().loadLabel(context.getPackageManager()))); builder.setPositiveButton(res.getText(R.string.upgrade_button), new Dialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Launch play store into the details of our app. try { activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + SharedLibraryMain.LIBRARY_PACKAGE))); } catch (android.content.ActivityNotFoundException anfe) { activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + SharedLibraryMain.LIBRARY_PACKAGE))); } } }); return builder.create(); } } Loading
tests/SharedLibrary/lib/src/com/google/android/test/shared_library/SharedLibraryMain.java +30 −35 Original line number Diff line number Diff line Loading @@ -17,16 +17,14 @@ package com.google.android.test.shared_library; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.Fragment; import android.app.FragmentManager; import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Resources; public class SharedLibraryMain { private static String LIBRARY_PACKAGE = "com.google.android.test.shared_library"; static String LIBRARY_PACKAGE = "com.google.android.test.shared_library"; /** * Base version of the library. Loading @@ -38,6 +36,9 @@ public class SharedLibraryMain { */ public static int VERSION_SECOND = 2; /** * Return the version number of the currently installed library. */ public static int getVersion(Context context) { PackageInfo pi = null; try { Loading @@ -48,40 +49,34 @@ public class SharedLibraryMain { } } public static void ensureVersion(Activity activity, int minVersion) { /** * Check that the library's version is at least the given minimum version, * displaying a dialog to have the user install an update if that is not true. * The dialog is displayed as a DialogFragment in your activity if a newer * version is needed. If a newer version is needed, false is returned. */ public static boolean ensureVersion(final Activity activity, int minVersion) { final FragmentManager fm = activity.getFragmentManager(); final String dialogTag = LIBRARY_PACKAGE + ":version"; Fragment curDialog = fm.findFragmentByTag(dialogTag); if (getVersion(activity) >= minVersion) { return; // Library version is sufficient. Make sure any version dialog // we had shown is removed before returning. if (curDialog != null) { fm.beginTransaction().remove(curDialog).commitAllowingStateLoss(); } // The current version of the library does not meet the required version. Show // a dialog to inform the user and have them update to the current version. // Note that updating the library will be necessity mean killing the current // application (so it can be re-started with the new version, so there is no // reason to return a result here. final Context context; try { context = activity.createPackageContext(LIBRARY_PACKAGE, 0); } catch (PackageManager.NameNotFoundException e) { throw new IllegalStateException("Can't find my package!", e); return true; } // Display the dialog. Note that we don't need to deal with activity lifecycle // stuff because if the activity gets recreated, it will first call through to // ensureVersion(), causing us to either re-display the dialog if needed or let // it now proceed. final Resources res = context.getResources(); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(res.getText(R.string.upgrade_title)); builder.setMessage(res.getString(R.string.upgrade_body, activity.getApplicationInfo().loadLabel(activity.getPackageManager()), context.getApplicationInfo().loadLabel(context.getPackageManager()))); builder.setPositiveButton(res.getText(R.string.upgrade_button), new Dialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Launch play store. // The current version of the library does not meet the required version. // If we don't already have a version dialog displayed, display it now. if (curDialog == null) { curDialog = new VersionDialog(); fm.beginTransaction().add(curDialog, dialogTag).commitAllowingStateLoss(); } }); builder.show(); // Tell the caller that the current version is not sufficient. return false; } }
tests/SharedLibrary/lib/src/com/google/android/test/shared_library/VersionDialog.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * 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.google.android.test.shared_library; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; /** * This is the dialog we show when the library's version is older than * the version the app needs. */ public class VersionDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Activity activity = getActivity(); // Need to use our library's resources for showing the dialog. final Context context; try { context = activity.createPackageContext(SharedLibraryMain.LIBRARY_PACKAGE, 0); } catch (PackageManager.NameNotFoundException e) { throw new IllegalStateException("Can't find my package!", e); } final Resources res = context.getResources(); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(res.getText(R.string.upgrade_title)); builder.setMessage(res.getString(R.string.upgrade_body, activity.getApplicationInfo().loadLabel(activity.getPackageManager()), context.getApplicationInfo().loadLabel(context.getPackageManager()))); builder.setPositiveButton(res.getText(R.string.upgrade_button), new Dialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Launch play store into the details of our app. try { activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + SharedLibraryMain.LIBRARY_PACKAGE))); } catch (android.content.ActivityNotFoundException anfe) { activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + SharedLibraryMain.LIBRARY_PACKAGE))); } } }); return builder.create(); } }