3333
3434/** Fragment that shows the list of friends. */
3535public class FriendsFragment extends Fragment {
36- private static final String TAG = "FriendsFragment" ;
37- private static final int PAGE_SIZE = 200 ;
36+ private static final String TAG = "FriendsFragment" ;
37+ private static final int PAGE_SIZE = 200 ;
3838
39- interface Listener {
40- // called when the user presses the `Back` button
41- void onBackButtonClicked ();
42- }
39+ interface Listener {
40+ // called when the user presses the `Back` button
41+ void onBackButtonClicked ();
42+ }
43+
44+ private View mView ;
45+ private ListView mListView ;
46+ private View mSpinner ;
47+ private ArrayAdapter <Player > mAdapter ;
48+ private MainActivity mActivity ;
49+ private ActivityResultLauncher <IntentSenderRequest > resolveLauncherFriendsConsent ;
50+ private ActivityResultLauncher <Intent > resolveLauncherCompareProfile ;
4351
44- private View mView ;
45- private ListView mListView ;
46- private View mSpinner ;
47- private ArrayAdapter <Player > mAdapter ;
48- private MainActivity mActivity ;
49- private ActivityResultLauncher <IntentSenderRequest > resolveLauncherFriendsConsent ;
50- private ActivityResultLauncher <Intent > resolveLauncherCompareProfile ;
52+ private Listener mListener = null ;
53+ private OnCompleteListener <AnnotatedData <PlayerBuffer >> onCompleteListener =
54+ new OnCompleteListener <AnnotatedData <PlayerBuffer >>() {
55+ @ Override
56+ public void onComplete (@ NonNull Task <AnnotatedData <PlayerBuffer >> task ) {
57+ if (task .isSuccessful ()) {
58+ if (task .getResult () == null ) {
59+ mListener .onBackButtonClicked ();
60+ }
61+ PlayerBuffer playerBuffer = task .getResult ().get ();
62+ try {
63+ if (DataBufferUtils .hasNextPage (playerBuffer )) {
64+ mActivity
65+ .getPlayersClient ()
66+ .loadMoreFriends (PAGE_SIZE )
67+ .addOnCompleteListener (mActivity , onCompleteListener );
68+ } else {
69+ LayoutInflater inflater = LayoutInflater .from (getContext ());
70+ mAdapter = getAdapter (playerBuffer , inflater );
71+ mListView .setAdapter (mAdapter );
72+ mSpinner .setVisibility (View .GONE );
73+ mListView .setVisibility (View .VISIBLE );
74+ }
75+ } finally {
76+ playerBuffer .release ();
77+ }
78+ } else {
79+ Log .e (TAG , "Getting friends failed with exception: " + task .getException ());
80+ try {
81+ if (task .getException () instanceof ResolvableApiException ) {
82+ PendingIntent pendingIntent =
83+ ((ResolvableApiException ) task .getException ()).getResolution ();
84+ resolveLauncherFriendsConsent .launch (
85+ new IntentSenderRequest .Builder (pendingIntent ).build ());
86+ }
87+ } catch (Exception e ) {
88+ Log .e (TAG , "Getting consent failed with exception: " + e );
89+ mListener .onBackButtonClicked ();
90+ }
91+ }
92+ }
93+ };
5194
52- private Listener mListener = null ;
53- private OnCompleteListener <AnnotatedData <PlayerBuffer >> onCompleteListener =
54- new OnCompleteListener <AnnotatedData <PlayerBuffer >>() {
55- @ Override
56- public void onComplete (@ NonNull Task <AnnotatedData <PlayerBuffer >> task ) {
57- if (task .isSuccessful ()) {
58- if (task .getResult () == null ) {
59- mListener .onBackButtonClicked ();
60- }
61- PlayerBuffer playerBuffer = task .getResult ().get ();
62- try {
63- if (DataBufferUtils .hasNextPage (playerBuffer )) {
64- mActivity
65- .getPlayersClient ()
66- .loadMoreFriends (PAGE_SIZE )
67- .addOnCompleteListener (mActivity , onCompleteListener );
68- } else {
69- LayoutInflater inflater = LayoutInflater .from (getContext ());
70- mAdapter = getAdapter (playerBuffer , inflater );
71- mListView .setAdapter (mAdapter );
72- mSpinner .setVisibility (View .GONE );
73- mListView .setVisibility (View .VISIBLE );
74- }
75- } finally {
76- playerBuffer .release ();
77- }
78- } else {
79- Log .e (TAG , "Getting friends failed with exception: " + task .getException ());
80- try {
81- if (task .getException () instanceof ResolvableApiException ) {
82- PendingIntent pendingIntent =
83- ((ResolvableApiException ) task .getException ()).getResolution ();
84- resolveLauncherFriendsConsent .launch (
85- new IntentSenderRequest .Builder (pendingIntent ).build ());
86- }
87- } catch (Exception e ) {
88- Log .e (TAG , "Getting consent failed with exception: " + e );
89- mListener .onBackButtonClicked ();
90- }
91- }
95+ @ Override
96+ public View onCreateView (LayoutInflater inflater , ViewGroup container , Bundle savedState ) {
97+ mView = inflater .inflate (R .layout .friends_screen , container , /* attachToRoot= */ false );
98+ mListView = mView .findViewById (R .id .load_friends_game_list );
99+ mSpinner = mView .findViewById (R .id .progress_bar );
100+ mActivity = (MainActivity ) getActivity ();
101+ mView
102+ .findViewById (R .id .back_button )
103+ .setOnClickListener (
104+ new View .OnClickListener () {
105+ @ Override
106+ public void onClick (View view ) {
107+ mListener .onBackButtonClicked ();
108+ }
109+ });
110+ resolveLauncherFriendsConsent =
111+ registerForActivityResult (
112+ new ActivityResultContracts .StartIntentSenderForResult (),
113+ new ActivityResultCallback <ActivityResult >() {
114+ @ Override
115+ public void onActivityResult (ActivityResult result ) {
116+ if (result .getResultCode () == Activity .RESULT_OK ) {
117+ refreshFriends ();
118+ } else {
119+ mListener .onBackButtonClicked ();
92120 }
93- };
121+ }
122+ });
123+ resolveLauncherCompareProfile =
124+ registerForActivityResult (
125+ new ActivityResultContracts .StartActivityForResult (),
126+ new ActivityResultCallback <ActivityResult >() {
127+ @ Override
128+ public void onActivityResult (ActivityResult result ) {
129+ if (result .getResultCode () == Activity .RESULT_OK ) {
130+ refreshFriends ();
131+ }
132+ }
133+ });
134+ refreshFriends ();
135+ return mView ;
136+ }
94137
95- @ Override
96- public View onCreateView (LayoutInflater inflater , ViewGroup container , Bundle savedState ) {
97- mView = inflater .inflate (R .layout .friends_screen , container , /* attachToRoot= */ false );
98- mListView = mView .findViewById (R .id .load_friends_game_list );
99- mSpinner = mView .findViewById (R .id .progress_bar );
100- mActivity = (MainActivity ) getActivity ();
101- mView
102- .findViewById (R .id .back_button )
103- .setOnClickListener (
104- new View .OnClickListener () {
105- @ Override
106- public void onClick (View view ) {
107- mListener .onBackButtonClicked ();
108- }
109- });
110- resolveLauncherFriendsConsent =
111- registerForActivityResult (
112- new ActivityResultContracts .StartIntentSenderForResult (),
113- new ActivityResultCallback <ActivityResult >() {
114- @ Override
115- public void onActivityResult (ActivityResult result ) {
116- if (result .getResultCode () == Activity .RESULT_OK ) {
117- refreshFriends ();
118- } else {
119- mListener .onBackButtonClicked ();
120- }
121- }
122- });
123- resolveLauncherCompareProfile =
124- registerForActivityResult (
125- new ActivityResultContracts .StartActivityForResult (),
126- new ActivityResultCallback <ActivityResult >() {
127- @ Override
128- public void onActivityResult (ActivityResult result ) {
129- if (result .getResultCode () == Activity .RESULT_OK ) {
130- refreshFriends ();
131- }
132- }
133- });
134- refreshFriends ();
135- return mView ;
136- }
138+ void setListener (Listener listener ) {
139+ mListener = listener ;
140+ }
137141
138- void setListener (Listener listener ) {
139- mListener = listener ;
142+ @ NonNull
143+ private ArrayAdapter <Player > getAdapter (
144+ PlayerBuffer playerBuffer , final LayoutInflater inflater ) {
145+ ArrayList <Player > players = new ArrayList <>();
146+ for (int i = 0 ; i < playerBuffer .getCount (); i ++) {
147+ players .add (playerBuffer .get (i ).freeze ());
140148 }
141-
142- @ NonNull
143- private ArrayAdapter <Player > getAdapter (
144- PlayerBuffer playerBuffer , final LayoutInflater inflater ) {
145- ArrayList <Player > players = new ArrayList <>();
146- for (int i = 0 ; i < playerBuffer .getCount (); i ++) {
147- players .add (playerBuffer .get (i ).freeze ());
148- }
149- return new ArrayAdapter <Player >(mActivity , R .layout .friends_row , players ) {
150- @ Override
151- public View getView (int position , View convertView , ViewGroup viewGroup ) {
152- View rowView = inflater .inflate (R .layout .friends_row , viewGroup , /* attachToRoot= */ false );
153- final Player player = getItem (position );
154- TextView textView = rowView .findViewById (R .id .friend_name );
155- textView .setText (player .getDisplayName ());
156- ImageButton showProfileButton = rowView .findViewById (R .id .show_profile );
157- showProfileButton .setOnClickListener (
158- new View .OnClickListener () {
159- @ Override
160- public void onClick (View v ) {
161- mActivity
162- .getPlayersClient ()
163- .getCompareProfileIntentWithAlternativeNameHints (
164- player .getPlayerId (), player .getDisplayName (), mActivity .getDisplayName ())
165- .addOnSuccessListener (
166- mActivity ,
167- new OnSuccessListener <Intent >() {
168- @ Override
169- public void onSuccess (Intent intent ) {
170- resolveLauncherCompareProfile .launch (intent );
171- }
172- });
173- }
149+ return new ArrayAdapter <Player >(mActivity , R .layout .friends_row , players ) {
150+ @ Override
151+ public View getView (int position , View convertView , ViewGroup viewGroup ) {
152+ View rowView = inflater .inflate (R .layout .friends_row , viewGroup , /* attachToRoot= */ false );
153+ final Player player = getItem (position );
154+ TextView textView = rowView .findViewById (R .id .friend_name );
155+ textView .setText (player .getDisplayName ());
156+ ImageButton showProfileButton = rowView .findViewById (R .id .show_profile );
157+ showProfileButton .setOnClickListener (
158+ new View .OnClickListener () {
159+ @ Override
160+ public void onClick (View v ) {
161+ mActivity
162+ .getPlayersClient ()
163+ .getCompareProfileIntentWithAlternativeNameHints (
164+ player .getPlayerId (), player .getDisplayName (), mActivity .getDisplayName ())
165+ .addOnSuccessListener (
166+ mActivity ,
167+ new OnSuccessListener <Intent >() {
168+ @ Override
169+ public void onSuccess (Intent intent ) {
170+ resolveLauncherCompareProfile .launch (intent );
171+ }
174172 });
175- return rowView ;
176- }
177- };
178- }
173+ }
174+ });
175+ return rowView ;
176+ }
177+ };
178+ }
179179
180- void refreshFriends () {
181- mListView .setAdapter (null );
182- mSpinner .setVisibility (View .VISIBLE );
183- mActivity
184- .getPlayersClient ()
185- .loadFriends (PAGE_SIZE , /* forceReload= */ false )
186- .addOnCompleteListener (mActivity , onCompleteListener );
187- }
180+ void refreshFriends () {
181+ mListView .setAdapter (null );
182+ mSpinner .setVisibility (View .VISIBLE );
183+ mActivity
184+ .getPlayersClient ()
185+ .loadFriends (PAGE_SIZE , /* forceReload= */ false )
186+ .addOnCompleteListener (mActivity , onCompleteListener );
187+ }
188188}
0 commit comments