summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout/loading_container.xml36
-rw-r--r--res/layout/permissions_frame.xml26
-rw-r--r--res/values/strings.xml3
-rw-r--r--src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java4
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java4
-rw-r--r--src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java4
-rw-r--r--src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java63
7 files changed, 126 insertions, 14 deletions
diff --git a/res/layout/loading_container.xml b/res/layout/loading_container.xml
new file mode 100644
index 00000000..5a165dee
--- /dev/null
+++ b/res/layout/loading_container.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/loading_container"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone"
+ android:gravity="center">
+
+ <ProgressBar style="?android:attr/progressBarStyleLarge"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/loading"
+ android:paddingTop="4dip"
+ android:singleLine="true" />
+
+</LinearLayout>
diff --git a/res/layout/permissions_frame.xml b/res/layout/permissions_frame.xml
index 0c70fe75..5e0d9ec1 100644
--- a/res/layout/permissions_frame.xml
+++ b/res/layout/permissions_frame.xml
@@ -16,18 +16,26 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/prefs_container"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:filterTouchesWhenObscured="true">
+ android:layout_height="match_parent">
- <TextView
- android:id="@+id/no_permissions"
+ <FrameLayout
+ android:id="@+id/prefs_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:text="@string/no_permissions"
- android:gravity="center"
- android:textAppearance="@android:style/TextAppearance.Large"
- />
+ android:filterTouchesWhenObscured="true">
+
+ <TextView
+ android:id="@+id/no_permissions"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/no_permissions"
+ android:gravity="center"
+ android:textAppearance="@android:style/TextAppearance.Large"
+ />
+
+ </FrameLayout>
+
+ <include layout="@layout/loading_container" />
</FrameLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f71dfe99..2e23df01 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -253,4 +253,7 @@
<!-- [CHAR LIMIT=NONE] Summary of a permission switch when it's enforced by policy -->
<string name="permission_summary_enforced_by_policy">Enforced by policy</string>
+ <!-- Text displayed until loading is done -->
+ <string name="loading">Loading\u2026</string>
+
</resources>
diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
index 92ad7c8a..52a2c8e1 100644
--- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
@@ -82,6 +82,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setLoading(true, false);
mHasConfirmedRevoke = false;
setHasOptionsMenu(true);
final ActionBar ab = getActivity().getActionBar();
@@ -247,6 +248,9 @@ public final class AppPermissionsFragment extends SettingsWithHeader
mExtraScreen.getPreferenceCount()));
screen.addPreference(extraPerms);
}
+ if (screen.getPreferenceCount() != 0) {
+ setLoading(false, true);
+ }
}
@Override
diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java
index d0609fd0..a814550c 100644
--- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java
@@ -68,6 +68,7 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ setLoading(true, false);
setHasOptionsMenu(true);
final ActionBar ab = getActivity().getActionBar();
if (ab != null) {
@@ -257,6 +258,9 @@ public final class ManagePermissionsFragment extends PermissionsFrameFragment
mExtraScreen.getPreferenceCount()));
screen.addPreference(extraScreenPreference);
}
+ if (screen.getPreferenceCount() != 0) {
+ setLoading(false, true);
+ }
}
public static class AdditionalPermissionsFragment extends PermissionsFrameFragment {
diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
index d0fff16c..92c53fb6 100644
--- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
@@ -77,6 +77,7 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setLoading(true, false);
setHasOptionsMenu(true);
final ActionBar ab = getActivity().getActionBar();
if (ab != null) {
@@ -198,6 +199,9 @@ public final class PermissionAppsFragment extends PermissionsFrameFragment imple
}
pref.setChecked(app.areRuntimePermissionsGranted());
}
+ if (preferences.getPreferenceCount() != 0) {
+ setLoading(false, true);
+ }
}
@Override
diff --git a/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java
index 2abdbd2a..88eda41f 100644
--- a/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/PermissionsFrameFragment.java
@@ -11,6 +11,9 @@ import android.support.v7.widget.RecyclerView.AdapterDataObserver;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
import android.widget.TextView;
import com.android.packageinstaller.R;
@@ -24,6 +27,10 @@ public abstract class PermissionsFrameFragment extends PreferenceFragment {
// TV-specific instance variables
@Nullable private VerticalGridView mGridView;
+ private View mLoadingView;
+ private ViewGroup mPrefsView;
+ private boolean mIsLoading;
+
/**
* Returns the view group that holds the preferences objects. This will
* only be set after {@link #onCreateView} has been called.
@@ -37,13 +44,15 @@ public abstract class PermissionsFrameFragment extends PreferenceFragment {
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.permissions_frame, container,
false);
- ViewGroup prefsContainer = (ViewGroup) rootView.findViewById(R.id.prefs_container);
- if (prefsContainer == null) {
- prefsContainer = rootView;
+ mPrefsView = (ViewGroup) rootView.findViewById(R.id.prefs_container);
+ if (mPrefsView == null) {
+ mPrefsView = rootView;
}
+ mLoadingView = rootView.findViewById(R.id.loading_container);
mPreferencesContainer = (ViewGroup) super.onCreateView(
- inflater, prefsContainer, savedInstanceState);
- prefsContainer.addView(mPreferencesContainer);
+ inflater, mPrefsView, savedInstanceState);
+ setLoading(mIsLoading, false, true /* force */);
+ mPrefsView.addView(mPreferencesContainer);
return rootView;
}
@@ -56,6 +65,50 @@ public abstract class PermissionsFrameFragment extends PreferenceFragment {
}
}
+ protected void setLoading(boolean loading, boolean animate) {
+ setLoading(loading, animate, false);
+ }
+
+ private void setLoading(boolean loading, boolean animate, boolean force) {
+ if (mIsLoading != loading || force) {
+ mIsLoading = loading;
+ if (mLoadingView == null) {
+ return;
+ }
+ setViewShown(mPrefsView, !loading, animate);
+ setViewShown(mLoadingView, loading, animate);
+ }
+ }
+
+ private void setViewShown(final View view, boolean shown, boolean animate) {
+ if (animate) {
+ Animation animation = AnimationUtils.loadAnimation(getContext(),
+ shown ? android.R.anim.fade_in : android.R.anim.fade_out);
+ if (shown) {
+ view.setVisibility(View.VISIBLE);
+ } else {
+ animation.setAnimationListener(new AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ view.setVisibility(View.INVISIBLE);
+ }
+ });
+ }
+ view.startAnimation(animation);
+ } else {
+ view.clearAnimation();
+ view.setVisibility(shown ? View.VISIBLE : View.INVISIBLE);
+ }
+ }
+
@Override
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
Bundle savedInstanceState) {