Commit 3124030c authored by Varun Patil's avatar Varun Patil Committed by GitHub

Merge pull request #268 from wncc/lottie

Lots of stuff
parents b78325e3 7f640c0c
......@@ -8,8 +8,8 @@ android {
manifestPlaceholders 'appAuthRedirectScheme': 'https'
minSdkVersion 21
targetSdkVersion 28
versionCode 22
versionName "1.2"
versionCode 25
versionName "1.3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
......@@ -34,6 +34,9 @@ ext {
firebaseVersion = '17.3.4'
flexboxVersion = '1.0.0'
sectionedRecyclerViewVersion = '1.2.0'
lottieVersion = '2.7.0'
shortcutBadgerVersion = '1.1.22@aar'
materialCalendarViewVersion = '2.0.1'
}
dependencies {
......@@ -57,5 +60,8 @@ dependencies {
implementation "me.relex:circleindicator:${circleIndicatorVersion}"
implementation "com.google.android:flexbox:${flexboxVersion}"
implementation "io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:${sectionedRecyclerViewVersion}"
implementation "com.airbnb.android:lottie:$lottieVersion"
implementation "me.leolin:ShortcutBadger:$shortcutBadgerVersion"
implementation "com.github.prolificinteractive:material-calendarview:${materialCalendarViewVersion}"
}
apply plugin: 'com.google.gms.google-services'
......@@ -99,6 +99,12 @@
</intent-filter>
</service>
<receiver android:name=".NotificationBroadcastReceiver">
<intent-filter>
<action android:name="notification_cancelled"/>
</intent-filter>
</receiver>
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id" />
......
......@@ -45,6 +45,8 @@ public class Constants {
public static final String FCM_BUNDLE_IMAGE = "image_url";
public static final String FCM_BUNDLE_LARGE_ICON = "large_icon";
public static final String FCM_BUNDLE_LARGE_CONTENT = "large_content";
public static final String FCM_BUNDLE_TOTAL_COUNT = "total_count";
public static final String NOTIF_CANCELLED = "notif_cancelled";
public static final String FCM_BUNDLE_ACTION_STARTING = "starting";
......@@ -61,4 +63,5 @@ public class Constants {
public static final double MAP_Xn = 19.134417, MAP_Yn = 72.901229, MAP_Zn = 1757, MAP_Zyn = 501;
public static final double[] MAP_WEIGHTS_X = {-11.392001766454612, -36.31634553309953, 73.91269388324432, -24.14021153064087, 3.4508817531539115, -0.1462262375477863, 5.532505074667804, -1.542391995870977, 36.14211738142935};
public static final double[] MAP_WEIGHTS_Y = {0.09738953520399705, -4.519868444089616, 62.38493718381985, 16.664561869057696, -2.168377988768651, 0.0919143297622087, 0.32304266159540823, 0.21688067854428716, -12.81393255320748};
public static final String MAP_INITIAL_MARKER = "initial_marker";
}
......@@ -26,6 +26,7 @@ import java.util.Map;
import app.insti.activity.MainActivity;
import app.insti.notifications.NotificationId;
import me.leolin.shortcutbadger.ShortcutBadger;
public class InstiAppFirebaseMessagingService extends FirebaseMessagingService {
String channel;
......@@ -53,6 +54,14 @@ public class InstiAppFirebaseMessagingService extends FirebaseMessagingService {
return PendingIntent.getActivity(this, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
/** In case the notification is dismissed */
protected PendingIntent getDeleteIntent(RemoteMessage remoteMessage, Integer notificationId) {
Intent intent = new Intent(getApplicationContext(), NotificationBroadcastReceiver.class);
intent.setAction(Constants.NOTIF_CANCELLED);
intent.putExtra(Constants.FCM_BUNDLE_NOTIFICATION_ID, remoteMessage.getData().get(Constants.FCM_BUNDLE_NOTIFICATION_ID));
return PendingIntent.getBroadcast(getApplicationContext(), notificationId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
channel = getResources().getString(R.string.default_notification_channel_id);
......@@ -84,7 +93,19 @@ public class InstiAppFirebaseMessagingService extends FirebaseMessagingService {
NotificationCompat.Builder builder = standardNotificationBuilder()
.setContentTitle(remoteMessage.getData().get(Constants.FCM_BUNDLE_TITLE))
.setContentText(message)
.setContentIntent(getNotificationIntent(remoteMessage, notification_id));
.setContentIntent(getNotificationIntent(remoteMessage, notification_id))
.setDeleteIntent(getDeleteIntent(remoteMessage, notification_id));
/* Update the badge */
final String count = remoteMessage.getData().get(Constants.FCM_BUNDLE_TOTAL_COUNT);
if (count != null) {
try {
int total_count = Integer.parseInt(count);
NotificationId.setCurrentCount(total_count);
ShortcutBadger.applyCount(getApplicationContext(), total_count);
}
catch (NumberFormatException ignored) {}
}
/* Check for article */
String largeContent = remoteMessage.getData().get(Constants.FCM_BUNDLE_LARGE_CONTENT);
......
package app.insti;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import app.insti.api.EmptyCallback;
import app.insti.api.RetrofitInterface;
import app.insti.api.ServiceGenerator;
import app.insti.notifications.NotificationId;
import me.leolin.shortcutbadger.ShortcutBadger;
public class NotificationBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Constants.NOTIF_CANCELLED)) {
// Get the notification id
String id = intent.getExtras().getString(Constants.FCM_BUNDLE_NOTIFICATION_ID);
if (id == null || id.equals("")) return;
// Get retrofit and session id
ServiceGenerator serviceGenerator = new ServiceGenerator(context);
RetrofitInterface retrofitInterface = serviceGenerator.getRetrofitInterface();
SessionManager session = new SessionManager(context);
if (session.isLoggedIn()) {
Utils.setSessionId(session.getSessionID());
}
// Mark as read
retrofitInterface.markNotificationDeleted(Utils.getSessionIDHeader(), id).enqueue(new EmptyCallback<Void>());
// Reduce current count
ShortcutBadger.applyCount(context.getApplicationContext(), NotificationId.decrementAndGetCurrentCount());
}
}
}
......@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.design.widget.NavigationView;
import android.support.transition.Fade;
import android.support.transition.Slide;
......@@ -13,6 +14,7 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.webkit.CookieManager;
import android.widget.ImageView;
import android.widget.Toast;
......@@ -247,4 +249,10 @@ public final class Utils {
}
}
}
@RequiresApi(21)
public static void clearCookies(Context context) {
CookieManager.getInstance().removeAllCookies(null);
CookieManager.getInstance().flush();
}
}
......@@ -52,9 +52,10 @@ public class LoginActivity extends AppCompatActivity {
session = new SessionManager(mContext);
if (session.isLoggedIn()) {
openMainActivity();
} else {
setContentView(R.layout.activity_login);
progressDialog = new ProgressDialog(LoginActivity.this);
}
setContentView(R.layout.activity_login);
progressDialog = new ProgressDialog(LoginActivity.this);
}
private void openMainActivity() {
......
......@@ -75,6 +75,8 @@ import app.insti.fragment.QuickLinksFragment;
import app.insti.fragment.SettingsFragment;
import app.insti.fragment.TrainingBlogFragment;
import app.insti.fragment.UserFragment;
import app.insti.notifications.NotificationId;
import me.leolin.shortcutbadger.ShortcutBadger;
import retrofit2.Call;
import retrofit2.Response;
......@@ -195,6 +197,9 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
Utils.notificationCache = new UpdatableList<>();
Utils.notificationCache.setList(response.body());
showNotifications();
NotificationId.setCurrentCount(Utils.notificationCache.size());
ShortcutBadger.applyCount(getApplicationContext(), NotificationId.getCurrentCount());
}
}
});
......
......@@ -19,6 +19,8 @@ import app.insti.fragment.NewsFragment;
import app.insti.fragment.NotificationsFragment;
import app.insti.fragment.PlacementBlogFragment;
import app.insti.fragment.TrainingBlogFragment;
import app.insti.notifications.NotificationId;
import me.leolin.shortcutbadger.ShortcutBadger;
public class NotificationsAdapter extends CardAdapter<Notification> {
private NotificationsFragment notificationsFragment;
......@@ -34,6 +36,7 @@ public class NotificationsAdapter extends CardAdapter<Notification> {
RetrofitInterface retrofitInterface = Utils.getRetrofitInterface();
String sessId = Utils.getSessionIDHeader();
retrofitInterface.markNotificationRead(sessId, notification.getNotificationId().toString()).enqueue(new EmptyCallback<Void>());
ShortcutBadger.applyCount(fragmentActivity.getApplicationContext(), NotificationId.decrementAndGetCurrentCount());
/* Close the bottom sheet */
notificationsFragment.dismiss();
......
......@@ -112,6 +112,9 @@ public interface RetrofitInterface {
@GET("notifications/read/{notificationID}")
Call<Void> markNotificationRead(@Header("Cookie") String sessionID, @Path("notificationID") String notificationID);
@GET("notifications/read/{notificationID}?delete=1")
Call<Void> markNotificationDeleted(@Header("Cookie") String sessionID, @Path("notificationID") String notificationID);
@GET("logout")
Call<Void> logout(@Header("Cookie") String sessionID);
......
......@@ -38,11 +38,17 @@ import retrofit2.Response;
public class AddEventFragment extends BaseFragment {
public ValueCallback<Uri[]> uploadMessage;
private ProgressDialog progressDialog;
private String query = "";
public AddEventFragment() {
// Required empty public constructor
}
public AddEventFragment withDate(String date) {
query += "&date=" + date;
return this;
}
@Override
public void onStart() {
super.onStart();
......@@ -92,6 +98,9 @@ public class AddEventFragment extends BaseFragment {
url = "https://" + host + "/edit-body/" + getArguments().getString("bodyId") + "?sandbox=true";
toolbar.setTitle("Update Organization");
}
url += query;
webView.loadUrl(url);
webView.setOnTouchListener(new View.OnTouchListener() {
......
......@@ -11,6 +11,7 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.widget.NestedScrollView;
......@@ -19,6 +20,11 @@ import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import android.util.Log;
......@@ -154,8 +160,6 @@ public class EventFragment extends BackHandledFragment implements TransitionTarg
eventPicture = (ImageView) getActivity().findViewById(R.id.event_picture_2);
TextView eventTitle = (TextView) getActivity().findViewById(R.id.event_page_title);
TextView eventDate = (TextView) getActivity().findViewById(R.id.event_page_date);
TextView eventTime = (TextView) getActivity().findViewById(R.id.event_page_time);
TextView eventVenue = (TextView) getActivity().findViewById(R.id.event_page_venue);
TextView eventDescription = (TextView) getActivity().findViewById(R.id.event_page_description);
goingButton = getActivity().findViewById(R.id.going_button);
interestedButton = getActivity().findViewById(R.id.interested_button);
......@@ -175,13 +179,6 @@ public class EventFragment extends BackHandledFragment implements TransitionTarg
Date Date = new Date(timestamp.getTime());
SimpleDateFormat simpleDateFormatDate = new SimpleDateFormat("dd MMM");
SimpleDateFormat simpleDateFormatTime = new SimpleDateFormat("HH:mm");
eventDate.setText(simpleDateFormatDate.format(Date));
eventTime.setText(simpleDateFormatTime.format(Date));
StringBuilder eventVenueName = new StringBuilder();
for (Venue venue : event.getEventVenues()) {
eventVenueName.append(", ").append(venue.getVenueShortName());
}
final List<Body> bodyList = event.getEventBodies();
bodyRecyclerView = (RecyclerView) getActivity().findViewById(R.id.body_card_recycler_view);
......@@ -189,9 +186,51 @@ public class EventFragment extends BackHandledFragment implements TransitionTarg
bodyRecyclerView.setAdapter(bodyAdapter);
bodyRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
// Common
final String timing = simpleDateFormatDate.format(Date) + " | " + simpleDateFormatTime.format(Date);
StringBuilder eventVenueName = new StringBuilder();
for (Venue venue : event.getEventVenues()) {
eventVenueName.append(", ").append(venue.getVenueShortName());
}
// Make the venues clickable
if (eventVenueName.length() > 0) {
// Get the whole string
SpannableString ss = new SpannableString(eventVenueName.toString().substring(2));
// Make each venue clickable
int i = 0;
for (final Venue venue : event.getEventVenues()) {
int length = venue.getVenueShortName().length();
ClickableSpan cs = new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
MapFragment mapFragment = new MapFragment();
Bundle bundle = new Bundle();
bundle.putString(Constants.MAP_INITIAL_MARKER, venue.getVenueName());
mapFragment.setArguments(bundle);
((MainActivity) getActivity()).updateFragment(mapFragment);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
if (getActivity() == null || !isAdded()) return;
ds.setColor(getResources().getColor(R.color.primaryTextColor));
ds.setUnderlineText(false);
}
};
ss.setSpan(cs, i, i + length, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
i += length + 2;
}
if (!eventVenueName.toString().equals(""))
eventVenue.setText(eventVenueName.toString().substring(2));
// Setup the text view
eventDate.setText(TextUtils.concat(timing + " | ", ss));
eventDate.setMovementMethod(LinkMovementMethod.getInstance());
} else {
eventDate.setText(TextUtils.concat(timing));
}
interestedButton.setOnClickListener(getUESOnClickListener(1));
......
......@@ -173,9 +173,6 @@ public class ExploreFragment extends Fragment {
public void doSearch(final String query) {
if (getActivity() == null || getView() == null) return;
// Show loading spinner
getView().findViewById(R.id.loadingPanel).setVisibility(View.VISIBLE);
// Set the lastest query
currentQuery = query;
......
package app.insti.fragment;
import android.Manifest;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.IntentSender;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PointF;
import android.graphics.Typeface;
......@@ -37,6 +40,7 @@ import android.text.style.ClickableSpan;
import android.text.style.StyleSpan;
import android.text.util.Linkify;
import android.util.Log;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuItem;
......@@ -235,6 +239,29 @@ public class MapFragment extends Fragment implements TextWatcher,
@Override
public void onResponse(Call<List<Venue>> call, Response<List<Venue>> response) {
if (response.isSuccessful()) {
// Setup fade animation for background
TypedValue typedValue = new TypedValue();
Resources.Theme theme = getContext().getTheme();
theme.resolveAttribute(R.attr.themeColor, typedValue, true);
int colorFrom = typedValue.data;
int colorTo = getResources().getColor(R.color.colorGray);
ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);
colorAnimation.setDuration(250); // milliseconds
colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
getView().findViewById(R.id.main_container).setBackgroundColor(
(int) animator.getAnimatedValue()
);
}
});
colorAnimation.start();
// Show the location fab
((FloatingActionButton) getView().findViewById(R.id.locate_fab)).show();
// Show the map and data
setupWithData(response.body());
}
}
......@@ -251,7 +278,9 @@ public class MapFragment extends Fragment implements TextWatcher,
Locations mLocations = new Locations(venues);
data = mLocations.data;
markerlist = new ArrayList<com.mrane.data.Marker>(data.values());
setupMap();
if (getArguments() != null) {
setupMap(getArguments().getString(Constants.MAP_INITIAL_MARKER));
}
// Setup locate button
FloatingActionButton fab = getView().findViewById(R.id.locate_fab);
......@@ -281,6 +310,10 @@ public class MapFragment extends Fragment implements TextWatcher,
}
private void setupMap() {
setupMap(null);
}
private void setupMap(String initalMarkerName) {
if (getView() == null) {
return;
}
......@@ -313,6 +346,7 @@ public class MapFragment extends Fragment implements TextWatcher,
campusMapView.setImageAsset("map.jpg");
campusMapView.setSettingsManager(settingsManager);
campusMapView.setData(data);
campusMapView.setInitialMarkerName(initalMarkerName);
addMarkerIcon = (ImageButton) getActivity().findViewById(R.id.add_marker_icon);
......
package app.insti.fragment;
import android.graphics.Canvas;
import android.os.Bundle;
import android.support.design.widget.BottomSheetDialogFragment;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -19,6 +21,8 @@ import app.insti.adapter.NotificationsAdapter;
import app.insti.api.EmptyCallback;
import app.insti.api.RetrofitInterface;
import app.insti.api.model.Notification;
import app.insti.notifications.NotificationId;
import me.leolin.shortcutbadger.ShortcutBadger;
import retrofit2.Call;
import retrofit2.Response;
......@@ -61,6 +65,9 @@ public class NotificationsFragment extends BottomSheetDialogFragment {
if (response.isSuccessful()) {
Utils.notificationCache.setList(response.body());
showNotifications(Utils.notificationCache);
NotificationId.setCurrentCount(Utils.notificationCache.size());
ShortcutBadger.applyCount(getContext().getApplicationContext(), NotificationId.getCurrentCount());
}
}
});
......@@ -79,6 +86,40 @@ public class NotificationsFragment extends BottomSheetDialogFragment {
notificationsRecyclerView = (RecyclerView) getView().findViewById(R.id.notifications_recycler_view);
notificationsRecyclerView.setAdapter(notificationsAdapter);
notificationsRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
/* Handle swiping of notifications */
ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
// Fade out the view when it is swiped out of the parent
final float alpha = 1.0f - Math.abs(dX) / (float) viewHolder.itemView.getWidth();
viewHolder.itemView.setAlpha(alpha);
viewHolder.itemView.setTranslationX(dX);
} else {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) {
final int position = viewHolder.getAdapterPosition(); //swiped position
final String id = Utils.notificationCache.get(position).getNotificationId().toString();
Utils.notificationCache.remove(position);
notificationsAdapter.notifyItemRemoved(position);
Utils.getRetrofitInterface().markNotificationDeleted(Utils.getSessionIDHeader(), id).enqueue(new EmptyCallback<Void>());
NotificationId.setCurrentCount(Utils.notificationCache.size());
ShortcutBadger.applyCount(getContext().getApplicationContext(), NotificationId.getCurrentCount());
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
itemTouchHelper.attachToRecyclerView(notificationsRecyclerView);
} else {
notificationsAdapter.setList(notifications);
notificationsAdapter.notifyDataSetChanged();
......
......@@ -174,6 +174,7 @@ public class SettingsFragment extends Fragment {
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();
......
......@@ -4,7 +4,24 @@ import java.util.concurrent.atomic.AtomicInteger;
public class NotificationId {
private final static AtomicInteger c = new AtomicInteger(0);
private final static AtomicInteger current_count = new AtomicInteger(0);
public static int getID() {
return c.incrementAndGet();
}
public static int getCurrentCount() {
return current_count.get();
}
public static int decrementAndGetCurrentCount() {
if (current_count.get() > 0)
return current_count.decrementAndGet();
else
return 0;
}
public static void setCurrentCount(int count) {
current_count.set(count);
}
}
......@@ -74,6 +74,7 @@ public class CampusMapView extends SubsamplingScaleImageView {
private float density;
private boolean isFirstLoad = true;
private SettingsManager settingsManager;
private String initialMarkerName = null;
public CampusMapView(Context context) {
this(context, null);
......@@ -100,6 +101,14 @@ public class CampusMapView extends SubsamplingScaleImageView {
RATIO_SHOW_PIN_TEXT = ratio;
}
public String getInitialMarkerName() {
return initialMarkerName;
}
public void setInitialMarkerName(String initialMarkerName) {
this.initialMarkerName = initialMarkerName;
}
private void initialise() {
displayMetrics = getResources().getDisplayMetrics();
density = displayMetrics.density;
......@@ -119,11 +128,31 @@ public class CampusMapView extends SubsamplingScaleImageView {
if (isFirstLoad) {
Runnable runnable = new Runnable() {
public void run() {
AnimationBuilder anim;
anim = animateScaleAndCenter(
getTargetMinScale(), MapFragment.MAP_CENTER);
anim.withDuration(MapFragment.DURATION_INIT_MAP_ANIM)
.start();
// Center marker on start
Marker centerMarker = null;
// Iterate all markers
if (getInitialMarkerName() != null) {
for (Marker m : markerList) {
if (m.getName().equals(getInitialMarkerName())) {
centerMarker = m;
break;
}
}
}
// If a marker is to be centered
if (centerMarker != null) {
setAndShowResultMarker(centerMarker);
} else {
AnimationBuilder anim;
anim = animateScaleAndCenter(
getTargetMinScale(), MapFragment.MAP_CENTER);
anim.withDuration(MapFragment.DURATION_INIT_MAP_ANIM)
.start();
}
// Don't do this again
isFirstLoad = false;
}
};
......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:enterFadeDuration="@android:integer/config_shortAnimTime"
android:exitFadeDuration="@android:integer/config_shortAnimTime">
<item android:state_checked="true"
android:color="@color/secondaryTextColor" />
<item android:state_pressed="true"
android:color="@color/secondaryTextColor" />
<item android:state_enabled="false"
android:color="#BBBBBB" />
<item android:color="@color/secondaryTextColor" />
</selector>
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M15.41,16.09l-4.58,-4.59 4.58,-4.59L14,5.5l-6,6 6,6z"/>
</vector>
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/>
</vector>
......@@ -67,18 +67,7 @@
android:visibility="visible"
android:layout_gravity="end|bottom" />
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
<include layout="@layout/loading_panel" />
<app.insti.TouchImageView
android:id="@+id/expanded_image_body"
......
......@@ -3,6 +3,7 @@
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:id="@+id/calendar_nsv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
......@@ -10,7 +11,8 @@
android:id="@+id/calendar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:orientation="vertical"
android:visibility="gone">
<RelativeLayout
android:layout_width="wrap_content"
......@@ -20,14 +22,19 @@
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/colorPrimary" />
<CalendarView
<com.prolificinteractive.materialcalendarview.MaterialCalendarView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/simpleCalendarView"
android:layout_width="fill_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusedMonthDateColor="#000000"
android:unfocusedMonthDateColor="#FFFFFF" />
app:mcv_showOtherDates="all"
app:mcv_selectionColor="@color/colorPrimary"
app:mcv_headerTextAppearance="@style/MatCalendarHeader"
app:mcv_leftArrow="@drawable/ic_keyboard_arrow_left_white_24dp"
app:mcv_rightArrow="@drawable/ic_keyboard_arrow_right_white_24dp"
app:mcv_dateTextAppearance="@style/CalendarDateAppearance"
android:padding="5dp" />
<View
android:layout_width="match_parent"
......@@ -70,19 +77,8 @@
android:layout_margin="16dp"
android:src="@drawable/ic_add_black_24dp"
android:tint="@android:color/black"
android:visibility="gone" />
android:visibility="invisible" />
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
<include layout="@layout/loading_panel" />
</RelativeLayout>
\ No newline at end of file
......@@ -37,18 +37,6 @@
</android.support.design.widget.CoordinatorLayout>
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<!--Progress Bar will show unless the data is being loaded-->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
<include layout="@layout/loading_panel" />
</LinearLayout>
......@@ -119,37 +119,6 @@
android:text="No Date Specified"
android:textColor="@color/colorWhite"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" | "
android:textColor="@color/colorWhite"
android:textSize="20sp" />
<TextView
android:id="@+id/event_page_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No Time Specified"
android:textColor="@color/colorWhite"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" | "
android:textColor="@color/colorWhite"
android:textSize="20sp" />
<TextView
android:id="@+id/event_page_venue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text="Venue"
android:textColor="@color/colorWhite"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
......@@ -235,7 +204,7 @@
android:layout_margin="16dp"
android:src="@drawable/ic_edit_black_24dp"
android:tint="@android:color/black"
android:visibility="gone" />
android:visibility="invisible" />
</RelativeLayout>
......
......@@ -40,17 +40,6 @@
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
<include layout="@layout/loading_panel" />
</FrameLayout>
\ No newline at end of file
......@@ -26,18 +26,8 @@
android:layout_margin="16dp"
android:src="@drawable/ic_add_black_24dp"
android:tint="@android:color/black"
android:visibility="gone" />
android:visibility="invisible" />
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<include layout="@layout/loading_panel" />
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
......@@ -33,18 +33,11 @@
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:focusable="true"
android:focusableInTouchMode="true"
tools:context="com.mrane.campusmap.MainActivity"
tools:ignore="MergeRootFrame">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"></LinearLayout>
<com.mrane.navigation.SlidingUpPanelLayout
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
......@@ -75,18 +68,7 @@
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
<include layout="@layout/loading_panel" />
<RelativeLayout
android:layout_width="match_parent"
......@@ -101,7 +83,8 @@
android:layout_marginBottom="96dp"
android:layout_marginRight="8dp"
android:src="@drawable/ic_my_location_black_24dp"
android:tint="@android:color/black" />
android:tint="@android:color/black"
android:visibility="invisible" />
</RelativeLayout>
</FrameLayout>
\ No newline at end of file
......@@ -37,16 +37,6 @@
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<include layout="@layout/loading_panel" />
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
......@@ -18,16 +18,6 @@
</android.support.v4.widget.SwipeRefreshLayout>
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<include layout="@layout/loading_panel" />
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
</RelativeLayout>
......@@ -9,17 +9,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
<include layout="@layout/loading_panel" />
</FrameLayout>
......@@ -18,16 +18,6 @@
</android.support.v4.widget.SwipeRefreshLayout>
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<include layout="@layout/loading_panel" />
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
</RelativeLayout>
......@@ -9,7 +9,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp">
android:paddingLeft="15dp"
android:paddingTop="0dp"
android:paddingBottom="5dp">
<TextView
style="@style/QuickLinksHeading"
......
......@@ -18,16 +18,6 @@
</android.support.v4.widget.SwipeRefreshLayout>
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<include layout="@layout/loading_panel" />
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
</RelativeLayout>
......@@ -10,24 +10,24 @@
tools:context="app.insti.fragment.UserFragment"
android:background="?attr/themeColor">
<RelativeLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:orientation="horizontal">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/user_profile_picture_profile"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="20dp"
android:layout_marginRight="15dp"
android:transitionName="sharedAvatar" />
android:layout_width="110dp"
android:layout_height="110dp"
android:layout_margin="15dp"
android:transitionName="sharedAvatar"
android:layout_gravity="center_vertical" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_toEndOf="@id/user_profile_picture_profile"
android:orientation="vertical">
android:orientation="vertical"
android:layout_gravity="center_vertical">
<TextView
android:id="@+id/user_name_profile"
......@@ -75,7 +75,7 @@
android:tint="?attr/themeColorInverse"
android:visibility="gone" />
</RelativeLayout>
</LinearLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
......@@ -104,18 +104,7 @@
</LinearLayout>
<RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:theme="@style/BlueAccent" />
</RelativeLayout>
<include layout="@layout/loading_panel" />
<app.insti.TouchImageView
android:id="@+id/expanded_image_profile"
......
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<com.airbnb.lottie.LottieAnimationView
android:layout_width="220dp"
android:layout_height="220dp"
android:scaleType="centerInside"
app:lottie_rawRes="@raw/logoanim"
app:lottie_loop="true"
app:lottie_autoPlay="true" />
</RelativeLayout>
{"v":"5.4.3","fr":29.9700012207031,"ip":0,"op":65.0000026475043,"w":512,"h":512,"nm":"Main","ddd":0,"assets":[{"id":"image_0","w":82,"h":200,"u":"","p":"data:image/png;base64,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","e":1}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"petal.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.948]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p948_0p167_0p167"],"t":0,"s":[15],"e":[55]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[-0.139]},"n":["0p833_0p833_0p167_-0p139"],"t":15,"s":[55],"e":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":30,"s":[40],"e":[15]},{"t":45.0000018328876}],"ix":11},"r":{"a":0,"k":-67,"ix":10},"p":{"a":0,"k":[256,330,0],"ix":2},"a":{"a":0,"k":[41,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":-1.00000004073083,"op":899.000036617021,"st":-1.00000004073083,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"petal.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.948]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p948_0p167_0p167"],"t":2,"s":[15],"e":[55]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[-0.139]},"n":["0p833_0p833_0p167_-0p139"],"t":17,"s":[55],"e":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":32,"s":[40],"e":[15]},{"t":47.0000019143492}],"ix":11},"r":{"a":0,"k":-45,"ix":10},"p":{"a":0,"k":[256,330,0],"ix":2},"a":{"a":0,"k":[41,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"petal.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.948]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p948_0p167_0p167"],"t":4,"s":[15],"e":[55]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[-0.139]},"n":["0p833_0p833_0p167_-0p139"],"t":19,"s":[55],"e":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":34,"s":[40],"e":[15]},{"t":49.0000019958109}],"ix":11},"r":{"a":0,"k":-20,"ix":10},"p":{"a":0,"k":[256,330,0],"ix":2},"a":{"a":0,"k":[41,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"petal.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.948]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p948_0p167_0p167"],"t":6,"s":[15],"e":[55]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[-0.139]},"n":["0p833_0p833_0p167_-0p139"],"t":21,"s":[55],"e":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":36,"s":[40],"e":[15]},{"t":51.0000020772726}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256,330,0],"ix":2},"a":{"a":0,"k":[41,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"petal.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.948]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p948_0p167_0p167"],"t":8,"s":[15],"e":[55]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[-0.139]},"n":["0p833_0p833_0p167_-0p139"],"t":23,"s":[55],"e":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":38,"s":[40],"e":[15]},{"t":53.0000021587343}],"ix":11},"r":{"a":0,"k":20,"ix":10},"p":{"a":0,"k":[256,330,0],"ix":2},"a":{"a":0,"k":[41,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"petal.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.948]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p948_0p167_0p167"],"t":10,"s":[15],"e":[55]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[-0.139]},"n":["0p833_0p833_0p167_-0p139"],"t":25,"s":[55],"e":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":40,"s":[40],"e":[15]},{"t":55.0000022401959}],"ix":11},"r":{"a":0,"k":45,"ix":10},"p":{"a":0,"k":[256,330,0],"ix":2},"a":{"a":0,"k":[41,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":2,"nm":"petal.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.948]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p948_0p167_0p167"],"t":12,"s":[15],"e":[55]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[-0.139]},"n":["0p833_0p833_0p167_-0p139"],"t":27,"s":[55],"e":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":42,"s":[40],"e":[15]},{"t":57.0000023216576}],"ix":11},"r":{"a":0,"k":67,"ix":10},"p":{"a":0,"k":[256,330,0],"ix":2},"a":{"a":0,"k":[41,200,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":900.000036657751,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
......@@ -47,6 +47,7 @@
<item name="android:paddingBottom">8dp</item>
<item name="android:textColor">?attr/themeColorInverse</item>
<item name="android:textSize">36sp</item>
<item name="android:fontFamily">sans-serif-light</item>
</style>
<style name="QuickLink">
......@@ -77,4 +78,15 @@
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
<style name="MatCalendarHeader" parent="TextAppearance.MaterialCalendarWidget.Header">
<item name="android:textColor">@color/primaryTextColor</item>
<item name="android:textStyle">normal</item>
<item name="android:textSize">16sp</item>
</style>
<style name="CalendarDateAppearance" parent="TextAppearance.AppCompat.Medium">
<item name="android:textColor">@color/mcv_text_date_light</item>
<item name="android:textSize">14sp</item>
</style>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment