Merge "Fixes for notification history" into rvc-dev

This commit is contained in:
Julia Reynolds
2020-04-13 13:11:06 +00:00
committed by Android (Google) Code Review
7 changed files with 85 additions and 94 deletions

View File

@@ -14,7 +14,7 @@
limitations under the License. limitations under the License.
--> -->
<ScrollView <androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll" android:id="@+id/scroll"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -124,22 +124,15 @@
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:paddingBottom="16dp" /> android:paddingBottom="16dp" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/list_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="true"
android:elevation="3dp"
android:background="@drawable/rounded_bg">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/notification_list" android:id="@+id/notification_list"
android:elevation="3dp"
android:background="@drawable/rounded_bg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipChildren="true" android:clipChildren="true"
android:scrollbars="none"/> android:scrollbars="none"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
@@ -156,21 +149,14 @@
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:paddingBottom="16dp" /> android:paddingBottom="16dp" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/list_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="3dp"
android:clipChildren="true"
android:background="@drawable/rounded_bg">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/notification_list" android:id="@+id/notification_list"
android:elevation="3dp"
android:background="@drawable/rounded_bg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipChildren="true" android:clipChildren="true"
android:scrollbars="none"/> android:scrollbars="none"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
@@ -198,4 +184,4 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</ScrollView> </androidx.core.widget.NestedScrollView>

View File

@@ -73,18 +73,12 @@
android:layout_height="1dp" android:layout_height="1dp"
android:background="?android:attr/listDivider"/> android:background="?android:attr/listDivider"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/list_container"
android:layout_width="match_parent"
android:clipChildren="true"
android:layout_height="wrap_content">
<com.android.settings.notification.history.NotificationHistoryRecyclerView <com.android.settings.notification.history.NotificationHistoryRecyclerView
android:id="@+id/notification_list" android:id="@+id/notification_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipChildren="true" android:clipChildren="true"
android:importantForAccessibility="yes"
android:scrollbars="none"/> android:scrollbars="none"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>

View File

@@ -77,7 +77,7 @@ public class NotificationHistoryActivity extends Activity {
View viewForPackage = LayoutInflater.from(this) View viewForPackage = LayoutInflater.from(this)
.inflate(R.layout.notification_history_app_layout, null); .inflate(R.layout.notification_history_app_layout, null);
final View container = viewForPackage.findViewById(R.id.list_container); final View container = viewForPackage.findViewById(R.id.notification_list);
container.setVisibility(View.GONE); container.setVisibility(View.GONE);
ImageButton expand = viewForPackage.findViewById(R.id.expand); ImageButton expand = viewForPackage.findViewById(R.id.expand);
expand.setContentDescription(container.getVisibility() == View.VISIBLE expand.setContentDescription(container.getVisibility() == View.VISIBLE

View File

@@ -16,13 +16,22 @@
package com.android.settings.notification.history; package com.android.settings.notification.history;
import static android.provider.Settings.EXTRA_APP_PACKAGE;
import static android.provider.Settings.EXTRA_CHANNEL_ID;
import static android.provider.Settings.EXTRA_CONVERSATION_ID;
import android.app.INotificationManager; import android.app.INotificationManager;
import android.app.NotificationHistory.HistoricalNotification; import android.app.NotificationHistory.HistoricalNotification;
import android.content.Intent;
import android.os.Bundle;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.Slog; import android.util.Slog;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.accessibility.AccessibilityNodeInfo;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@@ -63,8 +72,37 @@ public class NotificationHistoryAdapter extends
holder.setTitle(hn.getTitle()); holder.setTitle(hn.getTitle());
holder.setSummary(hn.getText()); holder.setSummary(hn.getText());
holder.setPostedTime(hn.getPostedTimeMs()); holder.setPostedTime(hn.getPostedTimeMs());
holder.addOnClick(hn.getPackage(), hn.getUserId(), hn.getChannelId(), holder.itemView.setOnClickListener(v -> {
hn.getConversationId()); Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
.putExtra(EXTRA_APP_PACKAGE, hn.getPackage())
.putExtra(EXTRA_CHANNEL_ID, hn.getChannelId())
.putExtra(EXTRA_CONVERSATION_ID, hn.getConversationId());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
holder.itemView.getContext().startActivityAsUser(intent, UserHandle.of(hn.getUserId()));
});
holder.itemView.setAccessibilityDelegate(new View.AccessibilityDelegate() {
@Override
public void onInitializeAccessibilityNodeInfo(View host,
AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(host, info);
CharSequence description =
host.getResources().getText(R.string.notification_history_view_settings);
AccessibilityNodeInfo.AccessibilityAction customClick =
new AccessibilityNodeInfo.AccessibilityAction(
AccessibilityNodeInfo.ACTION_CLICK, description);
info.addAction(customClick);
//info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_DISMISS);
}
@Override
public boolean performAccessibilityAction(View host, int action, Bundle args) {
if (action == AccessibilityNodeInfo.AccessibilityAction.ACTION_DISMISS.getId()) {
onItemSwipeDeleted(position);
return true;
}
return false;
}
});
} }
@Override @Override

View File

@@ -34,6 +34,7 @@ public class NotificationHistoryRecyclerView extends RecyclerView {
ItemTouchHelper touchHelper = new ItemTouchHelper( ItemTouchHelper touchHelper = new ItemTouchHelper(
new DismissTouchHelper(0, ItemTouchHelper.START | ItemTouchHelper.END)); new DismissTouchHelper(0, ItemTouchHelper.START | ItemTouchHelper.END));
touchHelper.attachToRecyclerView(this); touchHelper.attachToRecyclerView(this);
setNestedScrollingEnabled(false);
} }
public void setOnItemSwipeDeleteListener(OnItemSwipeDeleteListener listener) { public void setOnItemSwipeDeleteListener(OnItemSwipeDeleteListener listener) {

View File

@@ -16,20 +16,10 @@
package com.android.settings.notification.history; package com.android.settings.notification.history;
import static android.provider.Settings.EXTRA_APP_PACKAGE;
import static android.provider.Settings.EXTRA_CHANNEL_ID;
import static android.provider.Settings.EXTRA_CONVERSATION_ID;
import android.content.Intent;
import android.os.UserHandle;
import android.provider.Settings;
import android.view.View; import android.view.View;
import android.widget.DateTimeView; import android.widget.DateTimeView;
import android.widget.TextView; import android.widget.TextView;
import androidx.core.view.AccessibilityDelegateCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R; import com.android.settings.R;
@@ -61,28 +51,4 @@ public class NotificationHistoryViewHolder extends RecyclerView.ViewHolder {
void setPostedTime(long postedTime) { void setPostedTime(long postedTime) {
mTime.setTime(postedTime); mTime.setTime(postedTime);
} }
void addOnClick(String pkg, int userId, String channelId, String conversationId) {
itemView.setOnClickListener(v -> {
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
.putExtra(EXTRA_APP_PACKAGE, pkg)
.putExtra(EXTRA_CHANNEL_ID, channelId)
.putExtra(EXTRA_CONVERSATION_ID, conversationId);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
itemView.getContext().startActivityAsUser(intent, UserHandle.of(userId));
});
ViewCompat.setAccessibilityDelegate(itemView, new AccessibilityDelegateCompat() {
@Override
public void onInitializeAccessibilityNodeInfo(View host,
AccessibilityNodeInfoCompat info) {
super.onInitializeAccessibilityNodeInfo(host, info);
CharSequence description =
host.getResources().getText(R.string.notification_history_view_settings);
AccessibilityNodeInfoCompat.AccessibilityActionCompat customClick =
new AccessibilityNodeInfoCompat.AccessibilityActionCompat(
AccessibilityNodeInfoCompat.ACTION_CLICK, description);
info.addAction(customClick);
}
});
}
} }

View File

@@ -20,6 +20,7 @@ import android.app.PendingIntent;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Slog; import android.util.Slog;
@@ -81,9 +82,15 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder {
void setProfileBadge(Drawable badge) { void setProfileBadge(Drawable badge) {
mProfileBadge.setImageDrawable(badge); mProfileBadge.setImageDrawable(badge);
mProfileBadge.setVisibility(badge != null ? View.VISIBLE : View.GONE);
} }
void addOnClick(String pkg, int userId, PendingIntent pi) { void addOnClick(String pkg, int userId, PendingIntent pi) {
Intent appIntent = itemView.getContext().getPackageManager()
.getLaunchIntentForPackage(pkg);
boolean isPendingIntentValid = pi != null && PendingIntent.getActivity(
itemView.getContext(), 0, pi.getIntent(), PendingIntent.FLAG_NO_CREATE) != null;
if (isPendingIntentValid || appIntent != null) {
itemView.setOnClickListener(v -> { itemView.setOnClickListener(v -> {
if (pi != null) { if (pi != null) {
try { try {
@@ -91,9 +98,7 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder {
} catch (PendingIntent.CanceledException e) { } catch (PendingIntent.CanceledException e) {
Slog.e(TAG, "Could not launch", e); Slog.e(TAG, "Could not launch", e);
} }
} else { } else if (appIntent != null) {
Intent appIntent = itemView.getContext().getPackageManager()
.getLaunchIntentForPackage(pkg);
appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try { try {
itemView.getContext().startActivityAsUser(appIntent, UserHandle.of(userId)); itemView.getContext().startActivityAsUser(appIntent, UserHandle.of(userId));
@@ -116,4 +121,5 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder {
} }
}); });
} }
}
} }