Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
InstiApp
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
RAHUL SHARMA
InstiApp
Commits
4879d4b3
Commit
4879d4b3
authored
Feb 02, 2019
by
Varun Patil
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revamp SettingsFragment to use PreferencesFragmentCompat
parent
e2cedc42
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
150 additions
and
141 deletions
+150
-141
app/build.gradle
app/build.gradle
+1
-0
app/src/main/java/app/insti/fragment/SettingsFragment.java
app/src/main/java/app/insti/fragment/SettingsFragment.java
+108
-141
app/src/main/res/drawable/ic_local_phone_gray_36dp.xml
app/src/main/res/drawable/ic_local_phone_gray_36dp.xml
+5
-0
app/src/main/res/xml/preferences.xml
app/src/main/res/xml/preferences.xml
+36
-0
No files found.
app/build.gradle
View file @
4879d4b3
...
...
@@ -45,6 +45,7 @@ dependencies {
implementation
"com.android.support:design:${supportLibVersion}"
implementation
"com.android.support:exifinterface:${supportLibVersion}"
implementation
"com.android.support:support-v4:${supportLibVersion}"
implementation
"com.android.support:preference-v7:${supportLibVersion}"
implementation
"com.google.android.gms:play-services-maps:${playServicesVersion}"
implementation
"com.google.android.gms:play-services-location:${playServicesVersion}"
implementation
"com.google.android.gms:play-services-places:${playServicesVersion}"
...
...
app/src/main/java/app/insti/fragment/SettingsFragment.java
View file @
4879d4b3
package
app.insti.fragment
;
import
android.content.Intent
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.support.v4.app.Fragment
;
import
android.support.v7.preference.Preference
;
import
android.support.v7.preference.PreferenceFragmentCompat
;
import
android.support.v7.preference.SwitchPreferenceCompat
;
import
android.support.v7.widget.Toolbar
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.Button
;
import
android.widget.CompoundButton
;
import
android.widget.ImageView
;
import
android.widget.Switch
;
import
android.widget.TextView
;
import
com.squareup.picasso.Picasso
;
import
app.insti.Constants
;
import
app.insti.R
;
import
app.insti.SessionManager
;
import
app.insti.Utils
;
import
app.insti.activity.LoginActivity
;
import
app.insti.a
ctivity.MainActivity
;
import
app.insti.a
pi.EmptyCallback
;
import
app.insti.api.RetrofitInterface
;
import
app.insti.api.model.User
;
import
app.insti.api.request.UserShowContactPatchRequest
;
...
...
@@ -30,169 +21,145 @@ import retrofit2.Call;
import
retrofit2.Callback
;
import
retrofit2.Response
;
/**
* A simple {@link Fragment} subclass.
*/
public
class
SettingsFragment
extends
Fragment
{
User
user
;
public
SettingsFragment
()
{
// Required empty public constructor
}
public
class
SettingsFragment
extends
PreferenceFragmentCompat
{
SwitchPreferenceCompat
showContactPref
;
Preference
profilePref
;
Preference
feedbackPref
;
Preference
aboutPref
;
Preference
logoutPref
;
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
// Inflate the layout for this fragment
return
inflater
.
inflate
(
R
.
layout
.
fragment_settings
,
container
,
false
);
}
@Override
public
void
onStart
()
{
super
.
onStart
();
Toolbar
toolbar
=
getActivity
().
findViewById
(
R
.
id
.
toolbar
);
toolbar
.
setTitle
(
"Settings"
);
Utils
.
setSelectedMenuItem
(
getActivity
(),
R
.
id
.
nav_settings
);
Bundle
bundle
=
getArguments
();
public
void
onCreatePreferences
(
Bundle
savedInstanceState
,
String
rootKey
)
{
setPreferencesFromResource
(
R
.
xml
.
preferences
,
rootKey
);
String
userID
=
bundle
.
getString
(
Constants
.
USER_ID
);
populateViews
();
RetrofitInterface
retrofitInterface
=
Utils
.
getRetrofitInterface
();
retrofitInterface
.
getUser
(
Utils
.
getSessionIDHeader
(),
userID
).
enqueue
(
new
Callback
<
User
>()
{
// Show contact number
showContactPref
=
(
SwitchPreferenceCompat
)
findPreference
(
"show_contact"
);
showContactPref
.
setOnPreferenceChangeListener
(
new
Preference
.
OnPreferenceChangeListener
()
{
@Override
public
void
onResponse
(
Call
<
User
>
call
,
Response
<
User
>
response
)
{
if
(
response
.
isSuccessful
())
{
user
=
response
.
body
();
populateUserCard
();
setupContactSwitch
(
user
);
}
public
boolean
onPreferenceChange
(
Preference
preference
,
Object
o
)
{
toggleShowContact
((
SwitchPreferenceCompat
)
preference
,
o
);
return
false
;
}
});
// Update Profile
profilePref
=
findPreference
(
"profile"
);
profilePref
.
setOnPreferenceClickListener
(
new
Preference
.
OnPreferenceClickListener
()
{
@Override
public
void
onFailure
(
Call
<
User
>
call
,
Throwable
t
)
{
public
boolean
onPreferenceClick
(
Preference
preference
)
{
openWebURL
(
"https://gymkhana.iitb.ac.in/sso/user"
);
return
false
;
}
});
}
private
void
setupContactSwitch
(
User
user
)
{
final
Switch
showContactSwitch
=
getView
().
findViewById
(
R
.
id
.
show_contact_switch
);
showContactSwitch
.
setVisibility
(
View
.
VISIBLE
);
showContactSwitch
.
setChecked
(
user
.
getShowContactNumber
());
showContactSwitch
.
setOnCheckedChangeListener
(
new
CompoundButton
.
OnCheckedChangeListener
()
{
// Feedback
feedbackPref
=
findPreference
(
"feedback"
);
feedbackPref
.
setOnPreferenceClickListener
(
new
Preference
.
OnPreferenceClickListener
()
{
@Override
public
void
onCheckedChanged
(
CompoundButton
buttonView
,
final
boolean
isChecked
)
{
showContactSwitch
.
setEnabled
(
false
);
RetrofitInterface
retrofitInterface
=
Utils
.
getRetrofitInterface
();
retrofitInterface
.
patchUserMe
(
Utils
.
getSessionIDHeader
(),
new
UserShowContactPatchRequest
(
isChecked
)).
enqueue
(
new
Callback
<
User
>()
{
@Override
public
void
onResponse
(
Call
<
User
>
call
,
Response
<
User
>
response
)
{
if
(
response
.
isSuccessful
())
{
showContactSwitch
.
setEnabled
(
true
);
}
else
{
showContactSwitch
.
setChecked
(!
isChecked
);
showContactSwitch
.
setEnabled
(
true
);
}
}
@Override
public
void
onFailure
(
Call
<
User
>
call
,
Throwable
t
)
{
showContactSwitch
.
setChecked
(!
isChecked
);
showContactSwitch
.
setEnabled
(
true
);
}
});
public
boolean
onPreferenceClick
(
Preference
preference
)
{
openWebURL
(
"https://insti.app/feedback"
);
return
false
;
}
});
}
private
void
populateUserCard
()
{
if
(
getActivity
()
==
null
||
getView
()
==
null
)
{
return
;
}
ImageView
userProfilePictureImageView
=
getActivity
().
findViewById
(
R
.
id
.
user_card_avatar
);
TextView
userNameTextView
=
getActivity
().
findViewById
(
R
.
id
.
user_card_name
);
Picasso
.
get
()
.
load
(
user
.
getUserProfilePictureUrl
())
.
resize
(
800
,
0
)
.
placeholder
(
R
.
drawable
.
user_placeholder
)
.
into
(
userProfilePictureImageView
);
userNameTextView
.
setText
(
user
.
getUserName
());
// About
aboutPref
=
findPreference
(
"about"
);
aboutPref
.
setOnPreferenceClickListener
(
new
Preference
.
OnPreferenceClickListener
()
{
@Override
public
boolean
onPreferenceClick
(
Preference
preference
)
{
openAbout
();
return
false
;
}
});
getView
().
findViewById
(
R
.
id
.
role_card_layout
).
setOnClickListener
(
new
View
.
OnClickListener
()
{
// Logout
logoutPref
=
findPreference
(
"logout"
);
logoutPref
.
setOnPreferenceClickListener
(
new
Preference
.
OnPreferenceClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
UserFragment
userFragment
=
UserFragment
.
newInstance
(
user
.
getUserID
()
);
((
MainActivity
)
getActivity
()).
updateFragment
(
userFragment
)
;
public
boolean
onPreferenceClick
(
Preference
preference
)
{
logout
(
);
return
false
;
}
});
// Disable buttons if not logged in
final
SessionManager
sessionManager
=
new
SessionManager
(
getContext
());
if
(!
sessionManager
.
isLoggedIn
())
{
showContactPref
.
setVisible
(
false
);
logoutPref
.
setVisible
(
false
);
}
}
private
void
populateViews
()
{
// Check if we exist
if
(
getActivity
()
==
null
||
getView
()
==
null
)
return
;
@Override
public
void
onStart
()
{
super
.
onStart
()
;
Button
updateProfileButton
=
getView
().
findViewById
(
R
.
id
.
settings_update_profile
);
Button
feedbackButton
=
getView
().
findViewById
(
R
.
id
.
settings_feedback
);
Button
aboutButton
=
getView
().
findViewById
(
R
.
id
.
settings_about
);
Button
logoutButton
=
getView
().
findViewById
(
R
.
id
.
settings_logout
);
// Set toolbar title
Toolbar
toolbar
=
getActivity
().
findViewById
(
R
.
id
.
toolbar
);
toolbar
.
setTitle
(
"Settings"
);
Utils
.
setSelectedMenuItem
(
getActivity
(),
R
.
id
.
nav_settings
);
updateProfileButton
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
// Get the user id
Bundle
bundle
=
getArguments
();
String
userID
=
bundle
.
getString
(
Constants
.
USER_ID
);
// Fill in the user
RetrofitInterface
retrofitInterface
=
Utils
.
getRetrofitInterface
();
retrofitInterface
.
getUser
(
Utils
.
getSessionIDHeader
(),
userID
).
enqueue
(
new
EmptyCallback
<
User
>()
{
@Override
public
void
onClick
(
View
v
)
{
openWebURL
(
"https://gymkhana.iitb.ac.in/sso/user"
);
public
void
onResponse
(
Call
<
User
>
call
,
Response
<
User
>
response
)
{
if
(
response
.
isSuccessful
())
{
User
user
=
response
.
body
();
showContactPref
.
setChecked
(
user
.
getShowContactNumber
());
}
}
});
feedbackButton
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
}
public
void
toggleShowContact
(
final
SwitchPreferenceCompat
showContactPref
,
Object
o
)
{
final
boolean
isChecked
=
(
boolean
)
o
;
showContactPref
.
setEnabled
(
false
);
RetrofitInterface
retrofitInterface
=
Utils
.
getRetrofitInterface
();
retrofitInterface
.
patchUserMe
(
Utils
.
getSessionIDHeader
(),
new
UserShowContactPatchRequest
(
isChecked
)).
enqueue
(
new
Callback
<
User
>()
{
@Override
public
void
onClick
(
View
v
)
{
openWebURL
(
"https://insti.app/feedback"
);
public
void
onResponse
(
Call
<
User
>
call
,
Response
<
User
>
response
)
{
if
(
response
.
isSuccessful
())
{
showContactPref
.
setChecked
(
isChecked
);
showContactPref
.
setEnabled
(
true
);
}
else
{
showContactPref
.
setChecked
(!
isChecked
);
showContactPref
.
setEnabled
(
true
);
}
}
});
aboutButton
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
Utils
.
updateFragment
(
new
AboutFragment
(),
getActivity
());
public
void
onFailure
(
Call
<
User
>
call
,
Throwable
t
)
{
showContactPref
.
setChecked
(!
isChecked
);
showContactPref
.
setEnabled
(
true
);
}
});
}
// Logged in user vs Guest
public
void
openAbout
()
{
Utils
.
updateFragment
(
new
AboutFragment
(),
getActivity
());
}
public
void
logout
()
{
final
SessionManager
sessionManager
=
new
SessionManager
(
getContext
());
if
(
sessionManager
.
isLoggedIn
())
{
logoutButton
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
RetrofitInterface
retrofitInterface
=
Utils
.
getRetrofitInterface
();
retrofitInterface
.
logout
(
Utils
.
getSessionIDHeader
()).
enqueue
(
new
Callback
<
Void
>()
{
@Override
public
void
onResponse
(
Call
<
Void
>
call
,
Response
<
Void
>
response
)
{
if
(
response
.
isSuccessful
())
{
sessionManager
.
logout
();
Utils
.
clearCookies
(
getActivity
());
Intent
intent
=
new
Intent
(
getContext
(),
LoginActivity
.
class
);
startActivity
(
intent
);
getActivity
().
finish
();
}
//Server Error
}
@Override
public
void
onFailure
(
Call
<
Void
>
call
,
Throwable
t
)
{
//Network Error
}
});
RetrofitInterface
retrofitInterface
=
Utils
.
getRetrofitInterface
();
retrofitInterface
.
logout
(
Utils
.
getSessionIDHeader
()).
enqueue
(
new
EmptyCallback
<
Void
>()
{
@Override
public
void
onResponse
(
Call
<
Void
>
call
,
Response
<
Void
>
response
)
{
if
(
response
.
isSuccessful
())
{
sessionManager
.
logout
();
Utils
.
clearCookies
(
getActivity
());
Intent
intent
=
new
Intent
(
getContext
(),
LoginActivity
.
class
);
startActivity
(
intent
);
getActivity
().
finish
();
}
});
}
else
{
logoutButton
.
setVisibility
(
View
.
GONE
);
getView
().
findViewById
(
R
.
id
.
role_card_layout
).
setVisibility
(
View
.
GONE
);
}
}
});
}
private
void
openWebURL
(
String
URL
)
{
...
...
app/src/main/res/drawable/ic_local_phone_gray_36dp.xml
0 → 100644
View file @
4879d4b3
<vector
android:height=
"36dp"
android:tint=
"#767676"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:width=
"36dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z"
/>
</vector>
app/src/main/res/xml/preferences.xml
0 → 100644
View file @
4879d4b3
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
>
<SwitchPreferenceCompat
app:key=
"show_contact"
app:title=
"Show contact number"
app:summary=
"Toggle visibility on your profile"
android:icon=
"@drawable/ic_local_phone_gray_36dp"
/>
<Preference
app:key=
"profile"
app:title=
"Update Profile"
app:summary=
"Update personal details on SSO"
android:icon=
"@drawable/baseline_account_circle_gray_36"
/>
<Preference
app:key=
"feedback"
app:title=
"Send feedback"
app:summary=
"Report technical issues or suggest new features"
android:icon=
"@drawable/baseline_feedback_gray_36"
/>
<Preference
app:key=
"about"
app:title=
"About"
app:summary=
"The InstiApp Team"
android:icon=
"@drawable/baseline_info_gray_36"
/>
<Preference
app:key=
"logout"
app:title=
"Logout"
app:summary=
"Sign out of InstiApp"
android:icon=
"@drawable/baseline_exit_to_app_gray_36"
/>
</PreferenceScreen>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment