diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1c5b1aa..7b298ca 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -22,31 +22,33 @@
-
-
-
-
+
+
+
-
+ android:configChanges="orientation">
+
+
-
-
+ android:configChanges="orientation" />
+
-
+
+ android:configChanges="orientation"/>
+
+
+
diff --git a/app/src/main/java/com/udacity/exploreindia/base/PresenterFactory.java b/app/src/main/java/com/udacity/exploreindia/base/PresenterFactory.java
index 311833b..397f6b3 100644
--- a/app/src/main/java/com/udacity/exploreindia/base/PresenterFactory.java
+++ b/app/src/main/java/com/udacity/exploreindia/base/PresenterFactory.java
@@ -1,6 +1,8 @@
package com.udacity.exploreindia.base;
import com.udacity.exploreindia.injection.InjectionUtils;
+import com.udacity.exploreindia.ui.StatesWithCities.StatesWithCitiesActivity;
+import com.udacity.exploreindia.ui.StatesWithCities.StatesWithCitiesPresenter;
import com.udacity.exploreindia.ui.City.CityActivity;
import com.udacity.exploreindia.ui.City.CityPresenter;
import com.udacity.exploreindia.ui.home.HomeActivity;
@@ -16,6 +18,11 @@
import com.udacity.exploreindia.ui.home.fragments.search.SearchFragment;
import com.udacity.exploreindia.ui.login.LoginActivity;
import com.udacity.exploreindia.ui.login.LoginPresenter;
+import com.udacity.exploreindia.ui.selectedstate.SelectedStateActivity;
+import com.udacity.exploreindia.ui.selectedstate.SelectedStatePresenter;
+import com.udacity.exploreindia.ui.StatesWithCities.StatesWithCitiesFragment;
+import com.udacity.exploreindia.ui.selectedstate.fragment.SelectedPlacesFragment;
+import com.udacity.exploreindia.ui.selectedstate.fragment.SelectedPlacesPresenter;
import com.udacity.exploreindia.ui.splash.SplashActivity;
import com.udacity.exploreindia.ui.splash.SplashPresenter;
@@ -40,6 +47,10 @@ public static S getPresente
return presenter;
} else if (claxx instanceof LikedPlacesFragment) {
presenter = (S) new LikedPlacesPresenter(InjectionUtils.getSharedPreference(), InjectionUtils.providesDataRepo(), claxx.getContext());
+ } else if (claxx instanceof StatesWithCitiesFragment) {
+ presenter = (S) new StatesWithCitiesPresenter(InjectionUtils.getSharedPreference(), InjectionUtils.providesDataRepo(), claxx.getContext());
+ } else if (claxx instanceof SelectedPlacesFragment) {
+ presenter = (S) new SelectedPlacesPresenter(InjectionUtils.getSharedPreference(), InjectionUtils.providesDataRepo(), claxx.getContext());
} else {
throw new IllegalStateException("Activity presenter not supported yet");
}
@@ -57,6 +68,10 @@ public static S getPresente
presenter = (S) new LoginPresenter(InjectionUtils.getSharedPreference(), InjectionUtils.providesDataRepo(), claxx);
} else if (claxx instanceof HomeActivity) {
presenter = (S) new HomePresenter(InjectionUtils.getSharedPreference(), InjectionUtils.providesDataRepo(), claxx);
+ } else if (claxx instanceof StatesWithCitiesActivity) {
+ presenter = (S) new StatesWithCitiesPresenter(InjectionUtils.getSharedPreference(), InjectionUtils.providesDataRepo(), claxx);
+ } else if (claxx instanceof SelectedStateActivity) {
+ presenter = (S) new SelectedStatePresenter(InjectionUtils.getSharedPreference(), InjectionUtils.providesDataRepo(), claxx);
} else if (claxx instanceof CityActivity) {
presenter = (S) new CityPresenter(InjectionUtils.getSharedPreference(), InjectionUtils.providesDataRepo(), claxx);
} else {
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/CityData.java b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/CityData.java
new file mode 100644
index 0000000..38710ed
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/CityData.java
@@ -0,0 +1,29 @@
+package com.udacity.exploreindia.ui.StatesWithCities;
+
+/**
+ * Created by Arun K Babu on 10-May-18.
+ */
+
+// TODO: This class can be deleted after linking with real data
+
+/**
+ * Used for saving the dummy data for StatesWithCitiesScreen
+ */
+public class CityData
+{
+ private int mImageId;
+ private String mPlaceName;
+
+ public CityData(int imageResourceId, String placeName) {
+ mImageId = imageResourceId;
+ mPlaceName = placeName;
+ }
+
+ public int getImageResourceId() {
+ return mImageId;
+ }
+
+ public String getPlaceName() {
+ return mPlaceName;
+ }
+}
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/GridSpacingItemDecoration.java b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/GridSpacingItemDecoration.java
new file mode 100644
index 0000000..8e14fd7
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/GridSpacingItemDecoration.java
@@ -0,0 +1,29 @@
+package com.udacity.exploreindia.ui.StatesWithCities;
+
+import android.graphics.Rect;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+/**
+ * Created by Arun K Babu on 11-May-18.
+ */
+
+/**
+ * Adds some empty space between the views
+ */
+public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
+ private int space;
+
+ public GridSpacingItemDecoration(int space) {
+ this.space = space;
+ }
+
+ @Override
+ public void getItemOffsets(Rect outRect, View view,
+ RecyclerView parent, RecyclerView.State state) {
+ outRect.left = space;
+ outRect.right = space;
+ outRect.bottom = space;
+ outRect.top = 0;
+ }
+}
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/MajorCitiesSliderAdapter.java b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/MajorCitiesSliderAdapter.java
new file mode 100644
index 0000000..801db65
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/MajorCitiesSliderAdapter.java
@@ -0,0 +1,68 @@
+package com.udacity.exploreindia.ui.StatesWithCities;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v4.view.PagerAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.squareup.picasso.Picasso;
+import com.udacity.exploreindia.R;
+
+import java.util.ArrayList;
+
+/**
+ * Created by Arun K Babu on 10-May-18.
+ */
+
+public class MajorCitiesSliderAdapter extends PagerAdapter
+{
+ private Context mContext;
+ private ArrayList mMajorCitiesData;
+
+ public MajorCitiesSliderAdapter (Context context, ArrayList majorCitiesData) {
+ mContext = context;
+ mMajorCitiesData = majorCitiesData;
+ }
+
+ @Override
+ public int getCount() {
+ return mMajorCitiesData.size();
+ }
+
+ @Override
+ public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
+ return view == object;
+ }
+
+ @NonNull
+ @Override
+ public Object instantiateItem(@NonNull ViewGroup container, int position) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.states_with_cities_top_item, container, false);
+
+ ImageView cityImage = view.findViewById(R.id.iv_city_photo);
+ TextView cityName = view.findViewById(R.id.tv_city_name);
+
+ CityData cityData = mMajorCitiesData.get(position);
+
+ Picasso.with(mContext)
+ .load(cityData.getImageResourceId())
+ .placeholder(R.drawable.ic_search) // TODO: Set the placeholder image if no image loaded
+ .error(R.drawable.ic_add_box) // TODO: Set the error image in-case load fails
+ .into(cityImage);
+
+ cityName.setText(cityData.getPlaceName());
+
+ container.addView(view);
+
+ return view;
+ }
+
+ @Override
+ public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+ container.removeView((View) object);
+ }
+}
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/SmallCitiesAdapter.java b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/SmallCitiesAdapter.java
new file mode 100644
index 0000000..0eb431e
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/SmallCitiesAdapter.java
@@ -0,0 +1,62 @@
+package com.udacity.exploreindia.ui.StatesWithCities;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.udacity.exploreindia.R;
+
+import java.util.ArrayList;
+
+/**
+ * Created by Arun K Babu on 10-May-18.
+ */
+
+public class SmallCitiesAdapter extends RecyclerView.Adapter
+{
+ private ArrayList mSmallCitiesData;
+
+ public SmallCitiesAdapter(ArrayList smallCitiesData) {
+ mSmallCitiesData = smallCitiesData;
+ }
+
+ @NonNull
+ @Override
+ public SmallCitiesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.states_with_cities_bottom_item, parent, false);
+ return new SmallCitiesViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull SmallCitiesViewHolder holder, int position) {
+ CityData cityData = mSmallCitiesData.get(position);
+
+ holder.smallCityImageView.setImageResource(cityData.getImageResourceId());
+ holder.smallCityTextView.setText(cityData.getPlaceName());
+ }
+
+ @Override
+ public int getItemCount() {
+ return mSmallCitiesData.size();
+ }
+
+
+ /**
+ * Recycler view adapter requires a ViewHolder. So it's created as an inner class
+ */
+ class SmallCitiesViewHolder extends RecyclerView.ViewHolder
+ {
+ private ImageView smallCityImageView;
+ private TextView smallCityTextView;
+
+ public SmallCitiesViewHolder(View itemView) {
+ super(itemView);
+ this.smallCityImageView = itemView.findViewById(R.id.iv_small_city_photo);
+ this.smallCityTextView = itemView.findViewById(R.id.tv_small_city_name);
+ }
+ }
+}
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesActivity.java b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesActivity.java
index a650e89..3541de4 100644
--- a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesActivity.java
+++ b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesActivity.java
@@ -1,14 +1,15 @@
package com.udacity.exploreindia.ui.StatesWithCities;
import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.udacity.exploreindia.R;
import com.udacity.exploreindia.base.BaseActivity;
import com.udacity.exploreindia.databinding.ActivityStatesWithCitiesBinding;
-public class StatesWithCitiesActivity extends BaseActivity implements StatesWithCitiesContract.View {
+public class StatesWithCitiesActivity extends BaseActivity implements StatesWithCitiesContract.View
+{
@Override
protected void onCreate(Bundle savedInstanceState) {
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesFragment.java b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesFragment.java
new file mode 100644
index 0000000..c0d8ec4
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesFragment.java
@@ -0,0 +1,198 @@
+package com.udacity.exploreindia.ui.StatesWithCities;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.annotation.Nullable;
+import android.support.v4.view.ViewPager;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.GridLayout;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.udacity.exploreindia.R;
+import com.udacity.exploreindia.base.BaseFragment;
+import com.udacity.exploreindia.databinding.FragmentStatesWithCitiesBinding;
+
+import java.util.ArrayList;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * Created by Arun K Babu on 10-May-18.
+ */
+
+public class StatesWithCitiesFragment extends BaseFragment implements StatesWithCitiesContract.View
+{
+ private ViewPager mCitySliderViewPager;
+ private LinearLayout mDotsLayout;
+ private TextView[] mDots;
+ private RecyclerView mSmallCityRecyclerView;
+ private MajorCitiesSliderAdapter mMajorCitiesSliderAdapter;
+ private int mPosition;
+ private Handler handler;
+ private Context mContext;
+ private boolean started;
+
+ // TODO: Delete this after linking with real data
+ private ArrayList mDummyDataSmallCities;
+ private ArrayList mDummyDataMajorCities;
+
+ private Runnable slidePositionRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (started) {
+ startSlide();
+ } else {
+ stopSlide();
+ }
+ }
+ };
+
+ public StatesWithCitiesFragment(){} // Required public constructor
+
+ public static StatesWithCitiesFragment newInstance() {
+ StatesWithCitiesFragment frag = new StatesWithCitiesFragment();
+ Bundle bundle = new Bundle();
+ frag.setArguments(bundle);
+ return frag;
+ }
+
+ @Override
+ protected int getContentResource() {
+ return R.layout.fragment_states_with_cities;
+ }
+
+ @Override
+ protected void init(View view, @Nullable Bundle savedInstanceState) {
+ mContext = getContext();
+
+ mCitySliderViewPager = view.findViewById(R.id.vp_major_cities_slider);
+ mDotsLayout = view.findViewById(R.id.dotsLayout);
+ mSmallCityRecyclerView = view.findViewById(R.id.rv_small_cities_view);
+
+ // Populating with dummy data
+ mDummyDataSmallCities = new ArrayList<>();
+ mDummyDataMajorCities = new ArrayList<>();
+
+ // TODO: Delete this after linking with real data
+ for (int i=0; i<5; i++) {
+ mDummyDataMajorCities.add(new CityData(R.drawable.ahmedabad, "Ahmedabad"));
+ }
+ for (int i=0; i<16; i++) {
+ mDummyDataSmallCities.add(new CityData(R.drawable.image3, "Taj Mahal"));
+ }
+
+
+ // TODO: Pass in the current position of the card to the cardNumber variable.
+ // Like if you are showing the 3rd card from the Adapter or similar then pass it in here so that the 3rd dot will be highlighted
+ // Also call this method where ever you are updating the mPosition of the page to update the dot mPosition like onPageScrolled()
+ // callback in PageAdapter
+ int cardNumber = 3;
+ addDotsIndicator(cardNumber);
+
+ this.handler = new Handler();
+
+ // Populate the Top SlideView with data
+ mMajorCitiesSliderAdapter = new MajorCitiesSliderAdapter(mContext, mDummyDataMajorCities);
+ mCitySliderViewPager.setAdapter(mMajorCitiesSliderAdapter);
+ mCitySliderViewPager.addOnPageChangeListener(pageChangeListener);
+
+ // Populate the Bottom Small City view with data
+ mSmallCityRecyclerView.setHasFixedSize(true);
+ mSmallCityRecyclerView.setNestedScrollingEnabled(true);
+ mSmallCityRecyclerView.setLayoutManager(new GridLayoutManager(mContext, 3, GridLayout.VERTICAL, false));
+ mSmallCityRecyclerView.addItemDecoration(new GridSpacingItemDecoration(80));
+ mSmallCityRecyclerView.setAdapter(new SmallCitiesAdapter(mDummyDataSmallCities));
+
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ startSlide();
+ }
+
+
+ ViewPager.OnPageChangeListener pageChangeListener = new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ addDotsIndicator(position);
+ mPosition = position;
+
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ }
+ };
+
+ /**
+ * Adds progress dots right below the states_with_cities_top_item view
+ * @param position The current mPosition of the card. This mPosition is used to determine which dot to highlight
+ */
+ public void addDotsIndicator(int position) {
+ // TODO: Specify the total number of cards or cities here (Ex: 5)
+ // The size of this mDots array defines the number of dots that will be displayed
+ mDots = new TextView[5];
+
+ mDotsLayout.removeAllViews();
+
+ int textPadding = 20;
+
+ for (int i = 0; i < mDots.length; i++) {
+ mDots[i] = new TextView(mContext);
+ mDots[i].setText("•");
+ mDots[i].setPadding(textPadding, 0, textPadding, 0);
+ mDots[i].setTextSize(30);
+ // Set the color of the dot to light grey to indicate inactive dots
+ mDots[i].setTextColor(getResources().getColor(R.color.colorDotInactive));
+
+ mDotsLayout.addView(mDots[i]);
+ }
+
+ // Set the color of the dot to grey to indicate the currently active card mPosition
+ if (mDots.length > 0) {
+ mDots[position].setTextColor(getResources().getColor(R.color.colorDotActive));
+ mDots[position].setTextSize(35);
+ mDots[position].setPadding(textPadding, 0, textPadding, 0);
+ }
+ }
+
+ private void startSlide() {
+ started = true;
+ if (mPosition == mDummyDataMajorCities.size()) {
+ mPosition = 0;
+ } else {
+ mPosition = mPosition + 1;
+ }
+ mCitySliderViewPager.setCurrentItem(mPosition, true);
+ handler.postDelayed(slidePositionRunnable, 5000);
+ }
+
+ private void stopSlide() {
+ started = false;
+ handler.removeCallbacks(slidePositionRunnable);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ stopSlide();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ stopSlide();
+ }
+}
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesPresenter.java b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesPresenter.java
index b7c9c4a..419cb8c 100644
--- a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesPresenter.java
+++ b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithCities/StatesWithCitiesPresenter.java
@@ -6,8 +6,10 @@
import com.udacity.exploreindia.data.BaseRepo;
import com.udacity.exploreindia.helper.SharedPrefManager;
-public class StatesWithCitiesPresenter extends BasePresenter implements StatesWithCitiesContract.Presenter {
- public StatesWithCitiesPresenter(SharedPrefManager mSharedPreferences, BaseRepo mBaseRepo, Context mContext) {
+public class StatesWithCitiesPresenter extends BasePresenter implements StatesWithCitiesContract.Presenter
+{
+ public StatesWithCitiesPresenter(SharedPrefManager mSharedPreferences, BaseRepo mBaseRepo, Context mContext)
+ {
super(mSharedPreferences, mBaseRepo, mContext);
}
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithPlaces/StatesWithPlacesContract.java b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithPlaces/StatesWithPlacesContract.java
index 92a4ec7..d62ae93 100644
--- a/app/src/main/java/com/udacity/exploreindia/ui/StatesWithPlaces/StatesWithPlacesContract.java
+++ b/app/src/main/java/com/udacity/exploreindia/ui/StatesWithPlaces/StatesWithPlacesContract.java
@@ -4,6 +4,7 @@
import com.udacity.exploreindia.base.BaseView;
import com.udacity.exploreindia.ui.StatesWithCities.StatesWithCitiesContract;
+
public class StatesWithPlacesContract {
interface Presenter extends BaseMvpPresenter {
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/home/HomeActivity.java b/app/src/main/java/com/udacity/exploreindia/ui/home/HomeActivity.java
index 4bb11f9..e4a60e0 100644
--- a/app/src/main/java/com/udacity/exploreindia/ui/home/HomeActivity.java
+++ b/app/src/main/java/com/udacity/exploreindia/ui/home/HomeActivity.java
@@ -19,14 +19,17 @@
import com.udacity.exploreindia.base.BaseActivity;
import com.udacity.exploreindia.databinding.ActivityHomeBinding;
import com.udacity.exploreindia.helper.FragmentAdapter;
+import com.udacity.exploreindia.ui.StatesWithPlaces.StatesWithPlacesActivity;
import com.udacity.exploreindia.helper.SharedPrefManager;
import com.udacity.exploreindia.helper.Utils;
+
import com.udacity.exploreindia.ui.home.fragments.likedplaces.LikedPlacesFragment;
import com.udacity.exploreindia.ui.home.fragments.main.MainFragment;
import com.udacity.exploreindia.ui.home.fragments.place.PlaceFragment;
import com.udacity.exploreindia.ui.home.fragments.profile.UserDetailFragment;
import com.udacity.exploreindia.ui.home.fragments.search.SearchFragment;
import com.udacity.exploreindia.ui.login.LoginActivity;
+import com.udacity.exploreindia.ui.selectedstate.SelectedStateActivity;
public class HomeActivity extends BaseActivity implements HomeContract.View {
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStateActivity.java b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStateActivity.java
new file mode 100644
index 0000000..62bcda9
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStateActivity.java
@@ -0,0 +1,54 @@
+package com.udacity.exploreindia.ui.selectedstate;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.design.widget.TabLayout;
+import android.support.v4.view.ViewPager;
+import android.view.Menu;
+
+import com.udacity.exploreindia.R;
+import com.udacity.exploreindia.base.BaseActivity;
+import com.udacity.exploreindia.databinding.ActivitySelectedStateBinding;
+import com.udacity.exploreindia.ui.home.HomeContract;
+import com.udacity.exploreindia.ui.selectedstate.adapter.SelectedStateVPAdapter;
+import com.udacity.exploreindia.ui.selectedstate.fragment.SelectedPlacesFragment;
+import com.udacity.exploreindia.ui.StatesWithCities.StatesWithCitiesFragment;
+
+public class SelectedStateActivity extends BaseActivity implements HomeContract.View {
+
+ private ViewPager mVpSelectedState;
+ private TabLayout mTabSelectedState;
+
+ @Override
+ protected int getContentResource() {
+ return R.layout.activity_selected_state;
+ }
+
+ @Override
+ protected void init(@Nullable Bundle savedInstanceState) {
+ mVpSelectedState = findViewById(R.id.vp_selected_state);
+ mTabSelectedState = findViewById(R.id.tb_selected_state);
+ //Set up the view pager
+ setupViewPager(mVpSelectedState);
+ //set up the tab layout with the tab layout
+ mTabSelectedState.setupWithViewPager(mVpSelectedState);
+ }
+
+ @Override
+ protected void beforeView(@Nullable Bundle savedInstanceState) {
+
+ }
+
+ private void setupViewPager(ViewPager viewPager) {
+ SelectedStateVPAdapter adapter = new SelectedStateVPAdapter(getSupportFragmentManager());
+ adapter.addFragment(SelectedPlacesFragment.newInstance(), getString(R.string.tab_places_title));
+ adapter.addFragment(StatesWithCitiesFragment.newInstance(), getString(R.string.tab_city_title));
+ viewPager.setAdapter(adapter);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.search_menu, menu);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStateContract.java b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStateContract.java
new file mode 100644
index 0000000..9324bd3
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStateContract.java
@@ -0,0 +1,15 @@
+package com.udacity.exploreindia.ui.selectedstate;
+
+import com.udacity.exploreindia.base.BaseMvpPresenter;
+import com.udacity.exploreindia.base.BaseView;
+
+public interface SelectedStateContract {
+
+ interface Presenter extends BaseMvpPresenter {
+
+ }
+
+ interface View extends BaseView {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStatePresenter.java b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStatePresenter.java
new file mode 100644
index 0000000..2b18744
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/SelectedStatePresenter.java
@@ -0,0 +1,20 @@
+package com.udacity.exploreindia.ui.selectedstate;
+
+import android.content.Context;
+
+import com.udacity.exploreindia.base.BasePresenter;
+import com.udacity.exploreindia.data.BaseRepo;
+import com.udacity.exploreindia.helper.SharedPrefManager;
+
+public class SelectedStatePresenter extends BasePresenter implements SelectedStateContract.Presenter {
+
+
+ public SelectedStatePresenter(SharedPrefManager mSharedPreferences, BaseRepo mBaseRepo, Context mContext) {
+ super(mSharedPreferences, mBaseRepo, mContext);
+ }
+
+ @Override
+ public void init() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/adapter/SelectedStateVPAdapter.java b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/adapter/SelectedStateVPAdapter.java
new file mode 100644
index 0000000..9c9e1b1
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/adapter/SelectedStateVPAdapter.java
@@ -0,0 +1,40 @@
+package com.udacity.exploreindia.ui.selectedstate.adapter;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Bhavik Makwana on 11-05-2018.
+ */
+public class SelectedStateVPAdapter extends FragmentPagerAdapter {
+ private final List mFragmentList = new ArrayList<>();
+ private final List mFragmentTitleList = new ArrayList<>();
+
+ public SelectedStateVPAdapter(FragmentManager manager) {
+ super(manager);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return mFragmentList.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mFragmentList.size();
+ }
+
+ public void addFragment(Fragment fragment, String title) {
+ mFragmentList.add(fragment);
+ mFragmentTitleList.add(title);
+ }
+
+ @Override
+ public CharSequence getPageTitle(int position) {
+ return mFragmentTitleList.get(position);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/adapter/StatePlacesAdapter.java b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/adapter/StatePlacesAdapter.java
new file mode 100644
index 0000000..73f8dde
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/adapter/StatePlacesAdapter.java
@@ -0,0 +1,69 @@
+package com.udacity.exploreindia.ui.selectedstate.adapter;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.udacity.exploreindia.R;
+
+/**
+ * Created by Divya on 30-04-2018.
+ */
+
+public class StatePlacesAdapter extends RecyclerView.Adapter {
+ private Context context;
+
+ /*TODO
+ * 1. add the arrayList in the Constructor
+ * */
+ public StatePlacesAdapter(Context context) {
+ this.context = context;
+ }
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(context).inflate(R.layout.places_item_layout, parent, false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+
+ //TODO Remove this code when fetch the data from the server
+ if (position % 2 == 0)
+ holder.mIvPlaceImage.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.gateway_of_india));
+ else
+ holder.mIvPlaceImage.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.gateway_of_india_small));
+
+ holder.mTvPlaceName.setText("Diu Daman");
+ holder.mIvIsFavorite.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_action_favorite_fill));
+ }
+
+
+ @Override
+ public int getItemCount() {
+ //TODO Change this to -> arrayListObject.size()
+ return 10;
+ }
+
+ class ViewHolder extends RecyclerView.ViewHolder {
+ private ImageView mIvPlaceImage;
+ private TextView mTvPlaceName;
+ private ImageView mIvIsFavorite;
+
+ ViewHolder(View itemView) {
+ super(itemView);
+ mIvPlaceImage = itemView.findViewById(R.id.iv_state_place_image);
+ mTvPlaceName = itemView.findViewById(R.id.tv_state_place_name);
+ mIvIsFavorite = itemView.findViewById(R.id.iv_state_place_favourite);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesContract.java b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesContract.java
new file mode 100644
index 0000000..a79f301
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesContract.java
@@ -0,0 +1,18 @@
+package com.udacity.exploreindia.ui.selectedstate.fragment;
+
+import com.udacity.exploreindia.base.BaseMvpPresenter;
+import com.udacity.exploreindia.base.BaseView;
+
+/**
+ * Created by kamalshree on 5/3/2018.
+ */
+
+public interface SelectedPlacesContract {
+
+ interface Presenter extends BaseMvpPresenter {
+ }
+
+ interface View extends BaseView {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesFragment.java b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesFragment.java
new file mode 100644
index 0000000..036c880
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesFragment.java
@@ -0,0 +1,44 @@
+package com.udacity.exploreindia.ui.selectedstate.fragment;
+
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import com.udacity.exploreindia.R;
+import com.udacity.exploreindia.base.BaseFragment;
+import com.udacity.exploreindia.databinding.FragmentSelectedPlacesBinding;
+import com.udacity.exploreindia.ui.selectedstate.adapter.StatePlacesAdapter;
+
+
+public class SelectedPlacesFragment extends BaseFragment implements SelectedPlacesContract.View {
+
+ public SelectedPlacesFragment() {
+ // Required empty public constructor
+ }
+
+ public static SelectedPlacesFragment newInstance() {
+ SelectedPlacesFragment fragment = new SelectedPlacesFragment();
+ Bundle bundle = new Bundle();
+ fragment.setArguments(bundle);
+ return fragment;
+ }
+
+ @Override
+ protected int getContentResource() {
+ return R.layout.fragment_selected_places;
+ }
+
+ @Override
+ protected void init(View view, @Nullable Bundle savedInstanceState) {
+ //initializations
+ RecyclerView mRvSelectedPlaces = view.findViewById(R.id.rv_selected_state_places);
+ //set up the RecyclerView
+ mRvSelectedPlaces.setHasFixedSize(true);
+ mRvSelectedPlaces.setLayoutManager(new StaggeredGridLayoutManager(2, LinearLayout.VERTICAL));
+ mRvSelectedPlaces.setAdapter(new StatePlacesAdapter(getContext()));
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesPresenter.java b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesPresenter.java
new file mode 100644
index 0000000..80bd9f8
--- /dev/null
+++ b/app/src/main/java/com/udacity/exploreindia/ui/selectedstate/fragment/SelectedPlacesPresenter.java
@@ -0,0 +1,23 @@
+package com.udacity.exploreindia.ui.selectedstate.fragment;
+
+import android.content.Context;
+
+import com.udacity.exploreindia.base.BasePresenter;
+import com.udacity.exploreindia.data.BaseRepo;
+import com.udacity.exploreindia.helper.SharedPrefManager;
+
+/**
+ * Created by kamalshree on 5/3/2018.
+ */
+
+public class SelectedPlacesPresenter extends BasePresenter implements SelectedPlacesContract.Presenter {
+
+ public SelectedPlacesPresenter(SharedPrefManager mSharedPreferences, BaseRepo mBaseRepo, Context mContext) {
+ super(mSharedPreferences, mBaseRepo, mContext);
+ }
+
+ @Override
+ public void init() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_selected_state.xml b/app/src/main/res/layout/activity_selected_state.xml
new file mode 100644
index 0000000..2dc0eba
--- /dev/null
+++ b/app/src/main/res/layout/activity_selected_state.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_states_with_cities.xml b/app/src/main/res/layout/activity_states_with_cities.xml
index e579a2e..2285522 100644
--- a/app/src/main/res/layout/activity_states_with_cities.xml
+++ b/app/src/main/res/layout/activity_states_with_cities.xml
@@ -3,13 +3,14 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/cardview_location_layout.xml b/app/src/main/res/layout/cardview_location_layout.xml
index 5ef5e88..f60283e 100644
--- a/app/src/main/res/layout/cardview_location_layout.xml
+++ b/app/src/main/res/layout/cardview_location_layout.xml
@@ -5,9 +5,7 @@
android:id="@+id/card_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- card_view:cardUseCompatPadding="true"
- card_view:cardCornerRadius="8dp"
- >
+ card_view:cardUseCompatPadding="true">
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_states_with_cities.xml b/app/src/main/res/layout/fragment_states_with_cities.xml
new file mode 100644
index 0000000..50e35df
--- /dev/null
+++ b/app/src/main/res/layout/fragment_states_with_cities.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/places_item_layout.xml b/app/src/main/res/layout/places_item_layout.xml
new file mode 100644
index 0000000..12a97b0
--- /dev/null
+++ b/app/src/main/res/layout/places_item_layout.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/states_with_cities_bottom_item.xml b/app/src/main/res/layout/states_with_cities_bottom_item.xml
new file mode 100644
index 0000000..37795a6
--- /dev/null
+++ b/app/src/main/res/layout/states_with_cities_bottom_item.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/states_with_cities_top_item.xml b/app/src/main/res/layout/states_with_cities_top_item.xml
new file mode 100644
index 0000000..8a23f7f
--- /dev/null
+++ b/app/src/main/res/layout/states_with_cities_top_item.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/search_menu.xml b/app/src/main/res/menu/search_menu.xml
new file mode 100644
index 0000000..19e10e9
--- /dev/null
+++ b/app/src/main/res/menu/search_menu.xml
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 2ebc371..de9c7f1 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -31,4 +31,9 @@
+
+ #81000000
+ #D6D6D6
+ #5E5E5E
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index f2c07b2..ae18643 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -2,10 +2,8 @@
8dp
16dp
+ 8dp
+ 16dp
18sp
-
-
14sp
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4facaf8..91001e0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -73,6 +73,10 @@
Date :
17–04–18
+ Places
+ City
+ Search
+
diff --git a/local.properties b/local.properties
index fea7837..db8d841 100644
--- a/local.properties
+++ b/local.properties
@@ -4,5 +4,6 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
+
#Mon May 14 16:33:43 IST 2018
sdk.dir=C\:\\Users\\Navoki\\AppData\\Local\\Android\\Sdk