From 8db598fd0b9138ea4ccce39b7a905814fe950677 Mon Sep 17 00:00:00 2001 From: Sea Date: Fri, 19 Jun 2015 20:01:25 -0400 Subject: [PATCH 1/4] added a floating context menu xml --- .gitignore | 126 +++---------------------- app/res/menu/floating_context_menu.xml | 4 + app/res/values/strings.xml | 3 + 3 files changed, 22 insertions(+), 111 deletions(-) create mode 100644 app/res/menu/floating_context_menu.xml diff --git a/.gitignore b/.gitignore index eca7ba438..b139ba88d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,129 +1,33 @@ -*/target -target -tmp -*~ -bin -*/test-output -temp-testng-customsuite.xml -**pom.xml.releaseBackup -release.properties -gen -*/seed.txt -notes -logs -gen-external-apklibs -.idea -*.iml -.DS_Store -*.swp -out -.gradle -/local.properties -/build - -###OSX### - -.DS_Store -.AppleDouble -.LSOverride - -# Icon must ends with two \r. -Icon - - -# Thumbnails -._* - -# Files that might appear on external disk -.Spotlight-V100 -.Trashes - - -###Linux### - -*~ - -# KDE directory preferences -.directory - - -###Android### - -# Built application files +#built application files *.apk *.ap_ -# Files for ART and Dalvik VM +# files for the dex VM *.dex # Java class files *.class -# Generated files +# generated files bin/ gen/ -# Gradle files -.gradle/ -.gradletasknamecache -build/ - # Local configuration file (sdk path, etc) local.properties -# Proguard folder generated by Eclipse -proguard/ - -# Lint -lint-report.html -lint-report_files/ -lint_result.txt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.war -*.ear - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* +# Windows thumbnail db +Thumbs.db +# OSX files +.DS_Store -###IntelliJ### +# Eclipse project files +.classpath +.project +# Android Studio *.iml -*.ipr -*.iws -.idea/ - - -###Eclipse### - -*.pydevproject -.metadata -tmp/ -*.tmp -*.bak -*.swp -*~.nib -.settings/ -.loadpath - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# PDT-specific -.buildpath - -# sbteclipse plugin -.target - -# TeXlipse plugin -.texlipse +.idea +#.idea/workspace.xml - remove # and delete .idea if it better suit your needs. +.gradle +build/ \ No newline at end of file diff --git a/app/res/menu/floating_context_menu.xml b/app/res/menu/floating_context_menu.xml new file mode 100644 index 000000000..fe187c0cf --- /dev/null +++ b/app/res/menu/floating_context_menu.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/res/values/strings.xml b/app/res/values/strings.xml index afb0b9dbf..be0492914 100644 --- a/app/res/values/strings.xml +++ b/app/res/values/strings.xml @@ -302,4 +302,7 @@ Repository is deleted Login or Email + + Upload Photo + From 71decf7305ffebcacd449679a63c6bb9d4d7d4e1 Mon Sep 17 00:00:00 2001 From: Sea Date: Fri, 19 Jun 2015 21:20:18 -0400 Subject: [PATCH 2/4] added activity result and onCreateMenuInflater --- app/res/menu/floating_context_menu.xml | 5 +- .../mobile/ui/NavigationDrawerFragment.java | 52 ++++++++++++++++++- .../mobile/ui/user/UserListAdapter.java | 21 ++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/app/res/menu/floating_context_menu.xml b/app/res/menu/floating_context_menu.xml index fe187c0cf..75e76f9b2 100644 --- a/app/res/menu/floating_context_menu.xml +++ b/app/res/menu/floating_context_menu.xml @@ -1,4 +1,7 @@ - + \ No newline at end of file diff --git a/app/src/main/java/com/github/mobile/ui/NavigationDrawerFragment.java b/app/src/main/java/com/github/mobile/ui/NavigationDrawerFragment.java index 22719f1d8..01d8a0fa1 100644 --- a/app/src/main/java/com/github/mobile/ui/NavigationDrawerFragment.java +++ b/app/src/main/java/com/github/mobile/ui/NavigationDrawerFragment.java @@ -3,19 +3,27 @@ import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Point; +import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; +import android.provider.MediaStore; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarDrawerToggle; +import android.view.ContextMenu; import android.view.Display; import android.view.LayoutInflater; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -24,6 +32,7 @@ import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; +import android.widget.Toast; import com.github.mobile.R; import com.github.mobile.util.AvatarLoader; @@ -50,6 +59,8 @@ public class NavigationDrawerFragment extends Fragment implements AdapterView.On private TextView userRealName; private TextView userName; + private int PICK_IMAGE_REQUEST = 1; + public NavigationDrawerFragment() { } @@ -86,6 +97,32 @@ public boolean onOptionsItemSelected(MenuItem item) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_navigation_drawer, container, false); } + //created a floating menu + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + MenuInflater inflater; + inflater = getActivity().getMenuInflater(); + inflater.inflate(R.menu.floating_context_menu, menu); + } + @Override + public boolean onContextItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.id_upload_image: + Intent intent = new Intent(); +// Show only images, no videos or anything else + intent.setType("image/*"); + intent.setAction(Intent.ACTION_GET_CONTENT); +// Always show the chooser (if there are multiple options available) + startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); + return true; + + default: + return super.onContextItemSelected(item); + } + } + + @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { @@ -109,7 +146,11 @@ public void setUp(int fragmentId, DrawerLayout drawerLayout, NavigationDrawerAda View header = getActivity().getLayoutInflater().inflate(R.layout.drawer_header, mDrawerListView, false); + //adding a context menu on user image icon userImage = (ImageView) header.findViewById(R.id.user_picture); + registerForContextMenu(userImage); + + userRealName = (TextView) header.findViewById(R.id.user_real_name); userName = (TextView) header.findViewById(R.id.user_name); @@ -145,6 +186,7 @@ public void onDrawerClosed(View drawerView) { getActivity().supportInvalidateOptionsMenu(); } + @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); @@ -206,7 +248,15 @@ public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); } - + //Result activity + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK) { + Bundle extras = data.getExtras(); + Bitmap imageBitmap = (Bitmap) extras.get("data"); + userImage.setImageBitmap(imageBitmap); + } + } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); diff --git a/app/src/main/java/com/github/mobile/ui/user/UserListAdapter.java b/app/src/main/java/com/github/mobile/ui/user/UserListAdapter.java index 8ed970bdd..693f5dffa 100644 --- a/app/src/main/java/com/github/mobile/ui/user/UserListAdapter.java +++ b/app/src/main/java/com/github/mobile/ui/user/UserListAdapter.java @@ -15,7 +15,14 @@ */ package com.github.mobile.ui.user; +import android.content.Context; +import android.view.ContextMenu; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.ListView; import com.github.kevinsawicki.wishlist.SingleTypeAdapter; import com.github.mobile.R; @@ -28,8 +35,12 @@ */ public class UserListAdapter extends SingleTypeAdapter { + private final AvatarLoader avatars; + + + /** * Create user list adapter * @@ -37,6 +48,9 @@ public class UserListAdapter extends SingleTypeAdapter { * @param elements * @param avatars */ + + + public UserListAdapter(final LayoutInflater inflater, final User[] elements, final AvatarLoader avatars) { super(inflater, R.layout.user_item); @@ -60,4 +74,11 @@ protected void update(final int position, final User user) { avatars.bind(imageView(0), user); setText(1, user.getLogin()); } + + + + + + + } From 6d518dc2141a323e25c3e79ce4db2149b72c4d4c Mon Sep 17 00:00:00 2001 From: Sea Date: Fri, 19 Jun 2015 21:32:47 -0400 Subject: [PATCH 3/4] add scale set picture --- .../mobile/ui/NavigationDrawerFragment.java | 49 +++++++++++++++---- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/github/mobile/ui/NavigationDrawerFragment.java b/app/src/main/java/com/github/mobile/ui/NavigationDrawerFragment.java index 01d8a0fa1..a8ea43fcf 100644 --- a/app/src/main/java/com/github/mobile/ui/NavigationDrawerFragment.java +++ b/app/src/main/java/com/github/mobile/ui/NavigationDrawerFragment.java @@ -60,6 +60,7 @@ public class NavigationDrawerFragment extends Fragment implements AdapterView.On private TextView userName; private int PICK_IMAGE_REQUEST = 1; + private String mCurrentPhotoPath; public NavigationDrawerFragment() { } @@ -97,6 +98,7 @@ public boolean onOptionsItemSelected(MenuItem item) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_navigation_drawer, container, false); } + //created a floating menu @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { @@ -105,6 +107,7 @@ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMen inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.floating_context_menu, menu); } + @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -123,7 +126,6 @@ public boolean onContextItemSelected(MenuItem item) { } - @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -136,7 +138,7 @@ public boolean isDrawerOpen() { } public void setUp(int fragmentId, DrawerLayout drawerLayout, NavigationDrawerAdapter adapter, AvatarLoader avatar, - User user) { + User user) { mFragmentContainerView = getActivity().findViewById(fragmentId); mDrawerLayout = drawerLayout; //mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); @@ -173,9 +175,9 @@ public void setUp(int fragmentId, DrawerLayout drawerLayout, NavigationDrawerAda actionBar.setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle( - getActivity(), mDrawerLayout, - R.string.navigation_drawer_open, - R.string.navigation_drawer_close) { + getActivity(), mDrawerLayout, + R.string.navigation_drawer_open, + R.string.navigation_drawer_close) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); @@ -197,7 +199,7 @@ public void onDrawerOpened(View drawerView) { if (!mUserLearnedDrawer) { mUserLearnedDrawer = true; SharedPreferences sp = PreferenceManager - .getDefaultSharedPreferences(getActivity()); + .getDefaultSharedPreferences(getActivity()); sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); } @@ -248,7 +250,8 @@ public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); } - //Result activity + + //Result activity @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK) { @@ -257,6 +260,32 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { userImage.setImageBitmap(imageBitmap); } } + + // Scale user Image Icon + private void setPic() { + // Get the dimensions of the View + int targetW = userImage.getWidth(); + int targetH = userImage.getHeight(); + + // Get the dimensions of the bitmap + BitmapFactory.Options bmOptions = new BitmapFactory.Options(); + bmOptions.inJustDecodeBounds = true; + BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); + int photoW = bmOptions.outWidth; + int photoH = bmOptions.outHeight; + + // Determine how much to scale down the image + int scaleFactor = Math.min(photoW/targetW, photoH/targetH); + + // Decode the image file into a Bitmap sized to fill the View + bmOptions.inJustDecodeBounds = false; + bmOptions.inSampleSize = scaleFactor; + bmOptions.inPurgeable = true; + + Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); + userImage.setImageBitmap(bitmap); + } + @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); @@ -278,11 +307,11 @@ public static interface NavigationDrawerCallbacks { public boolean checkTabletOrLandscape() { boolean landscape = getActivity().getResources() - .getConfiguration() - .orientation == Configuration.ORIENTATION_LANDSCAPE; + .getConfiguration() + .orientation == Configuration.ORIENTATION_LANDSCAPE; boolean tablet = (getActivity().getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) - == Configuration.SCREENLAYOUT_SIZE_XLARGE; + == Configuration.SCREENLAYOUT_SIZE_XLARGE; return landscape || tablet; } From 55eaf91ee537c4d6ceb54338db79420b6a70f0d4 Mon Sep 17 00:00:00 2001 From: Sea Date: Fri, 19 Jun 2015 23:20:13 -0400 Subject: [PATCH 4/4] fixed crash after selecting an image from gallery --- app/AndroidManifest.xml | 1 + .../mobile/ui/NavigationDrawerFragment.java | 17 +++++++++++------ .../roboactivities/RoboActionBarActivity.java | 7 +++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/AndroidManifest.xml b/app/AndroidManifest.xml index f89d56f60..4098cd2a0 100644 --- a/app/AndroidManifest.xml +++ b/app/AndroidManifest.xml @@ -11,6 +11,7 @@ +