Offset 1, 17 lines modifiedOffset 1, 16 lines modified
  
1 package·com.android.textclassifier.common.intent;1 package·com.android.textclassifier.common.intent;
  
 2 import·androidx.core.app.RemoteActionCompat;
2 import·android.content.ComponentName;3 import·android.content.ComponentName;
3 import·com.google.common.base.Objects; 
4 import·androidx.core.content.ContextCompat;4 import·androidx.core.content.ContextCompat;
5 import·android.content.pm.ApplicationInfo;5 import·android.content.pm.ApplicationInfo;
6 import·android.content.pm.ActivityInfo;6 import·android.content.pm.ActivityInfo;
7 import·android.content.pm.PackageManager;7 import·android.content.pm.PackageManager;
8 import·androidx.core.app.RemoteActionCompat; 
9 import·android.content.pm.ResolveInfo;8 import·android.content.pm.ResolveInfo;
10 import·android.app.PendingIntent;9 import·android.app.PendingIntent;
11 import·android.content.pm.PackageManager$NameNotFoundException;10 import·android.content.pm.PackageManager$NameNotFoundException;
12 import·com.android.textclassifier.common.base.TcLog;11 import·com.android.textclassifier.common.base.TcLog;
13 import·androidx.core.graphics.drawable.IconCompat;12 import·androidx.core.graphics.drawable.IconCompat;
14 import·android.content.Context;13 import·android.content.Context;
15 import·com.google.common.base.Preconditions;14 import·com.google.common.base.Preconditions;
Offset 60, 44 lines modifiedOffset 59, 27 lines modified
60 ········}59 ········}
61 ····}60 ····}
62 ····61 ····
63 ····private·static·PendingIntent·createPendingIntent(final·Context·context,·final·Intent·intent,·final·int·n)·{62 ····private·static·PendingIntent·createPendingIntent(final·Context·context,·final·Intent·intent,·final·int·n)·{
64 ········return·PendingIntent.getActivity(context,·n,·intent,·134217728);63 ········return·PendingIntent.getActivity(context,·n,·intent,·134217728);
65 ····}64 ····}
66 ····65 ····
67 ····private·RemoteActionCompat·createRemoteAction(final·Context·context,·final·Intent·intent,·final·IconCompat·iconCompat,·final·boolean·shouldShowIcon,·final·ResolveInfo·resolveInfo,·LabeledIntent$TitleChooser·default_TITLE_CHOOSER)·{ 
68 ········final·PendingIntent·pendingIntent·=·createPendingIntent(context,·intent,·this.requestCode); 
69 ········if·(default_TITLE_CHOOSER·==·null)·{ 
70 ············default_TITLE_CHOOSER·=·LabeledIntent.DEFAULT_TITLE_CHOOSER; 
71 ········} 
72 ········CharSequence·charSequence·=·default_TITLE_CHOOSER.chooseTitle(this,·resolveInfo); 
73 ········if·(TextUtils.isEmpty(charSequence))·{ 
74 ············TcLog.w("LabeledIntent",·"Custom·titleChooser·return·null,·fallback·to·the·default·titleChooser"); 
75 ············charSequence·=·LabeledIntent.DEFAULT_TITLE_CHOOSER.chooseTitle(this,·resolveInfo); 
76 ········} 
77 ········final·RemoteActionCompat·remoteActionCompat·=·new·RemoteActionCompat(iconCompat,·charSequence,·(CharSequence)this.resolveDescription(resolveInfo,·context.getPackageManager()),·pendingIntent); 
78 ········remoteActionCompat.setShouldShowIcon(shouldShowIcon); 
79 ········return·remoteActionCompat; 
80 ····} 
81 ···· 
82 ····private·static·String·getApplicationName(final·ResolveInfo·resolveInfo,·final·PackageManager·packageManager)·{66 ····private·static·String·getApplicationName(final·ResolveInfo·resolveInfo,·final·PackageManager·packageManager)·{
83 ········if·(resolveInfo·!=·null)·{67 ········final·ActivityInfo·activityInfo·=·resolveInfo.activityInfo;
84 ············final·ActivityInfo·activityInfo·=·resolveInfo.activityInfo;68 ········if·(activityInfo·==·null)·{
85 ············if·(activityInfo·!=·null)·{69 ············return·null;
86 ················if·("android".equals(activityInfo.packageName))·{ 
87 ····················return·null; 
88 ················} 
89 ················final·ApplicationInfo·applicationInfo·=·resolveInfo.activityInfo.applicationInfo; 
90 ················if·(applicationInfo·==·null)·{ 
91 ····················return·null; 
92 ················} 
93 ················return·packageManager.getApplicationLabel(applicationInfo).toString(); 
94 ············} 
95 ········}70 ········}
96 ········return·null;71 ········if·("android".equals(activityInfo.packageName))·{
 72 ············return·null;
 73 ········}
 74 ········final·ApplicationInfo·applicationInfo·=·resolveInfo.activityInfo.applicationInfo;
 75 ········if·(applicationInfo·==·null)·{
 76 ············return·null;
 77 ········}
 78 ········return·packageManager.getApplicationLabel(applicationInfo).toString();
97 ····}79 ····}
98 ····80 ····
99 ····private·static·boolean·hasPermission(final·Context·context,·final·ActivityInfo·activityInfo)·{81 ····private·static·boolean·hasPermission(final·Context·context,·final·ActivityInfo·activityInfo)·{
100 ········final·boolean·exported·=·activityInfo.exported;82 ········final·boolean·exported·=·activityInfo.exported;
101 ········boolean·b·=·false;83 ········boolean·b·=·false;
102 ········if·(!exported)·{84 ········if·(!exported)·{
103 ············return·false;85 ············return·false;
Offset 109, 45 lines modifiedOffset 91, 31 lines modified
109 ········}91 ········}
110 ········if·(ContextCompat.checkSelfPermission(context,·permission)·==·0)·{92 ········if·(ContextCompat.checkSelfPermission(context,·permission)·==·0)·{
111 ············b·=·b2;93 ············b·=·b2;
112 ········}94 ········}
113 ········return·b;95 ········return·b;
114 ····}96 ····}
115 ····97 ····
116 ····private·boolean·isWebIntent()·{ 
117 ········final·boolean·equals·=·"android.intent.action.VIEW".equals(this.intent.getAction()); 
118 ········boolean·b·=·false; 
119 ········if·(!equals)·{ 
120 ············return·false; 
121 ········} 
122 ········final·String·scheme·=·this.intent.getScheme(); 
123 ········if·(Objects.equal((Object)scheme,·(Object)"http")·||·Objects.equal((Object)scheme,·(Object)"https"))·{ 
124 ············b·=·true; 
125 ········} 
126 ········return·b; 
127 ····} 
128 ···· 
129 ····private·String·resolveDescription(final·ResolveInfo·resolveInfo,·final·PackageManager·packageManager)·{98 ····private·String·resolveDescription(final·ResolveInfo·resolveInfo,·final·PackageManager·packageManager)·{
130 ········if·(!TextUtils.isEmpty((CharSequence)this.descriptionWithAppName))·{99 ········if·(!TextUtils.isEmpty((CharSequence)this.descriptionWithAppName))·{
131 ············final·String·applicationName·=·getApplicationName(resolveInfo,·packageManager);100 ············final·String·applicationName·=·getApplicationName(resolveInfo,·packageManager);
132 ············if·(!TextUtils.isEmpty((CharSequence)applicationName))·{101 ············if·(!TextUtils.isEmpty((CharSequence)applicationName))·{
133 ················return·String.format(this.descriptionWithAppName,·applicationName);102 ················return·String.format(this.descriptionWithAppName,·applicationName);
134 ············}103 ············}
135 ········}104 ········}
136 ········return·this.description;105 ········return·this.description;
137 ····}106 ····}
138 ····107 ····
139 ····public·LabeledIntent$Result·resolve(final·Context·context,·final·LabeledIntent$TitleChooser·labeledIntent$TitleChooser)·{108 ····public·LabeledIntent$Result·resolve(final·Context·context,·LabeledIntent$TitleChooser·default_TITLE_CHOOSER)·{
140 ········final·PackageManager·packageManager·=·context.getPackageManager();109 ········final·PackageManager·packageManager·=·context.getPackageManager();
141 ········final·Intent·intent·=·this.intent;110 ········final·Intent·intent·=·this.intent;
142 ········boolean·b·=·false;111 ········boolean·shouldShowIcon·=·false;
143 ········final·ResolveInfo·resolveActivity·=·packageManager.resolveActivity(intent,·0);112 ········final·ResolveInfo·resolveActivity·=·packageManager.resolveActivity(intent,·0);
144 ········final·int·n·=·17301573;113 ········IconCompat·iconCompat·=·null;
145 ········final·String·s·=·"LabeledIntent";114 ········final·String·s·=·"LabeledIntent";
146 ········IconCompat·iconFromPackage·=·null; 
147 ········if·(resolveActivity·!=·null)·{115 ········if·(resolveActivity·!=·null)·{
148 ············final·ActivityInfo·activityInfo·=·resolveActivity.activityInfo;116 ············final·ActivityInfo·activityInfo·=·resolveActivity.activityInfo;
149 ············if·(activityInfo·!=·null)·{117 ············if·(activityInfo·!=·null)·{
150 ················if·(!hasPermission(context,·activityInfo))·{118 ················if·(!hasPermission(context,·activityInfo))·{
151 ····················final·StringBuilder·sb·=·new·StringBuilder();119 ····················final·StringBuilder·sb·=·new·StringBuilder();
152 ····················sb.append("No·permission·to·access:·");120 ····················sb.append("No·permission·to·access:·");
153 ····················sb.append(resolveActivity.activityInfo);121 ····················sb.append(resolveActivity.activityInfo);
Offset 158, 32 lines modifiedOffset 126, 35 lines modified
158 ················final·String·packageName·=·activityInfo2.packageName;126 ················final·String·packageName·=·activityInfo2.packageName;
159 ················final·String·name·=·activityInfo2.name;127 ················final·String·name·=·activityInfo2.name;
160 ················if·(packageName·!=·null·&&·name·!=·null)·{128 ················if·(packageName·!=·null·&&·name·!=·null)·{
161 ····················final·Intent·intent2·=·new·Intent(this.intent);129 ····················final·Intent·intent2·=·new·Intent(this.intent);
162 ····················if·(!"android".equals(packageName))·{130 ····················if·(!"android".equals(packageName))·{
163 ························intent2.setComponent(new·ComponentName(packageName,·name));131 ························intent2.setComponent(new·ComponentName(packageName,·name));
164 ························if·(resolveActivity.activityInfo.getIconResource()·!=·0)·{132 ························if·(resolveActivity.activityInfo.getIconResource()·!=·0)·{
165 ····························iconFromPackage·=·createIconFromPackage(context,·packageName,·resolveActivity.activityInfo.getIconResource());133 ····························iconCompat·=·createIconFromPackage(context,·packageName,·resolveActivity.activityInfo.getIconResource());
166 ····························b·=·true;134 ····························shouldShowIcon·=·true;
167 ························}135 ························}
168 ····················}136 ····················}
169 ····················final·boolean·b2·=·b;137 ····················if·(iconCompat·==·null)·{
170 ····················IconCompat·withResource;138 ························iconCompat·=·IconCompat.createWithResource(context,·17301573);
171 ····················if·(iconFromPackage·==·null)·{139 ····················}
172 ························withResource·=·IconCompat.createWithResource(context,·n);140 ····················final·PendingIntent·pendingIntent·=·createPendingIntent(context,·intent2,·this.requestCode);
 141 ····················if·(default_TITLE_CHOOSER·==·null)·{
 142 ························default_TITLE_CHOOSER·=·LabeledIntent.DEFAULT_TITLE_CHOOSER;
173 ····················}143 ····················}
174 ····················else·{144 ····················CharSequence·charSequence·=·default_TITLE_CHOOSER.chooseTitle(this,·resolveActivity);
175 ························withResource·=·iconFromPackage;145 ····················if·(TextUtils.isEmpty(charSequence))·{
 146 ························TcLog.w(s,·"Custom·titleChooser·return·null,·fallback·to·the·default·titleChooser");
 147 ························charSequence·=·LabeledIntent.DEFAULT_TITLE_CHOOSER.chooseTitle(this,·resolveActivity);
176 ····················}148 ····················}
177 ····················return·new·LabeledIntent$Result(intent2,·this.createRemoteAction(context,·intent2,·withResource,·b2,·resolveActivity,·labeledIntent$TitleChooser));149 ····················final·RemoteActionCompat·remoteActionCompat·=·new·RemoteActionCompat(iconCompat,·charSequence,·(CharSequence)this.resolveDescription(resolveActivity,·packageManager),·pendingIntent);
 150 ····················remoteActionCompat.setShouldShowIcon(shouldShowIcon);
 151 ····················return·new·LabeledIntent$Result(intent2,·remoteActionCompat);
178 ················}152 ················}
179 ················TcLog.w(s,·"packageName·or·className·is·null");153 ················TcLog.w(s,·"packageName·or·className·is·null");
180 ················return·null;154 ················return·null;
181 ············}155 ············}
182 ········}156 ········}
183 ········if·(this.isWebIntent())·{ 
184 ············return·new·LabeledIntent$Result(new·Intent(this.intent),·this.createRemoteAction(context,·this.intent,·IconCompat.createWithResource(context,·n),·false,·resolveActivity,·labeledIntent$TitleChooser)); 
185 ········} 
186 ········TcLog.w(s,·"resolveInfo·or·activityInfo·is·null");157 ········TcLog.w(s,·"resolveInfo·or·activityInfo·is·null");
187 ········return·null;158 ········return·null;
188 ····}159 ····}
189 }160 }