Android application powering the mirror in my house

Related tags

App HomeMirror
Overview

HomeMirror

Android application powering the mirror in my house

Google Play Link

Software

  • Day, time, and weather display
  • Birthday messages
  • Chore reminders
  • Biking weather recommendation
  • Stock price swings
  • Today's new XKCD
  • Next calendar event
  • Top news headline
  • Face detection with mood detection

APIs provided by Yahoo Finance, Forecast.io, the BBC, and XKCD

How to Run

  1. Clone project
  2. Get a forecast.io api key
  3. Add a keys.xml file under res/values with <string name="dark_sky_api_key">your_key</string>
  4. Import project to Android Studio and run

When its mirror time, I also recommend turning on the device Developer Option: "Stay Awake - Screen will never sleep while charging"

Making a Mirror

Video walk-through on adafruit (Thank you Becky!)

  1. Obtain Android device

We had too many. Sad old devices are ideal. I used a 2012 Nexus 7.

  1. Obtain two-way mirror

We did this the old-fashioned way, and quested to Canal Plastic Center. A beautiful and highly recommended establishment.

Wiki of places to buy two-way mirrors

Get a mirror at least as large as your Android device. My mirror is 6"x12" with 1/8 thickness.

  1. Sticky stuff for mounting

Our trickiest problem was figuring out how to mount everything with minimal damage and error. We eventually discovered reusable double-sided adhesive, which is amazing.

We're using it both to mount the mirror to the device, and the device to the wall.

  1. Attach black backing

We used black construction paper. If your device and mirror are awesomely identical in size, you can skip this.

Note: You want to glue it well, so the backing doesn't tear when the adhesive is holding it.

  • Cut a piece of black backing the same size as your mirror
  • Decide where you want your device to show through. We did upper right. Leave a border all the way around for adhesive.
  • At that location, carefully cut a hole in the backing the same size as your device
  • CAREFULLY glue the backing to the mirror. We used spray adhesive, and practiced how we would pick it up and lay it on the mirror a couple times before going for it. We also wore black surgical gloves.

  1. Adhesion

Fire up the app on the device.

Put the adhesive along the bezel or edges of the device. Line up the mirror and stick it on there.

  1. Wall spot

You probably want a long usb cable. Find a wall spot where you can keep the device plugged in.

Put a bunch of adhesive on the back of the device, and stick it on there.

Links

At the heart of this project, is 'put a mirror on it'. Check out alternative mirror projects and feel free to add your own reflections

Comments
  • [Suggestion] Wireless sync

    [Suggestion] Wireless sync

    From what I saw, you have to hard code your calendar, stocks, birthdays and such before compiling and deploying the code. It'd be cool if a future version provided wireless sync with another device. It'd probably need the coding of a second app to allow your mirror to mirror - pun intended - your main device.

    opened by magroski 8
  • PR for Issue #11

    PR for Issue #11

    Implemented the new Mobile Vision API FaceDetection feature.

    Based on the isSmilingProbability returned from the API, display an uplifting message to the user based on varying degrees of implied mood.

    These include moderately invasive changes to: -- AndroidManifest, in that it requires the camera feature and permission. -- A new dependency, being Google Play Services Vision API

    A new Module for face detection and a placeholder icon (until something more in-line with the current icons) were added,

    Inspiration (Stuart Smalley): https://www.youtube.com/watch?v=-DIETlxquzY

    opened by akodiakson 5
  • Accepting options

    Accepting options

    Hello, I'm new to the android development circle and I need a tip. I've got Android Studio working with an emulated device (Nexus 5, see screenshot). However, once I enter my options, I don't see how to accept the settings I've specified.

    I'm very sorry for the obvious question. -.- capture

    opened by kneeki 3
  • Crashlytics Developer Tools error.

    Crashlytics Developer Tools error.

    Hi Hanna, nice work.

    I get the following error (I am using Google studio):

    Error:Execution failed for task ':app:fabricGenerateResourcesRelease'.

    Crashlytics Developer Tools error.

    Is there a way to disable Crashlytics?

    opened by joeDiHare 2
  • Add calendar support

    Add calendar support

    If there is an upcoming calendar event today, display it along with the start/end time and location.

    Works by reading the Android system calendar so should work with most calendar apps.

    opened by alexbate 2
  • Full display mirror

    Full display mirror

    Just wandering how to display more contents than a screen size tablet will take on the mirror?

    Probably use multiple tablets to display the more contents ?

    opened by mavencode01 2
  • No R.string.dark_sky_api_key in your project.

    No R.string.dark_sky_api_key in your project.

    I tried to download your project in Intellij. But it can't be compiled. It's showed int Messages console: Error:(43, 81) Gradle: error: cannot find symbol variable dark_sky_api_key

    So could your update your project?

    opened by bytebeats 1
  • App crashing

    App crashing

    Hi,

    after installation, the app crashes on my tablet. Here is the log I can see in Android Studio when I try to open the app. Someone can help me?

    Thank you very much.

    Rob

    11-06 17:41:36.424 7906-7906/com.morristaedt.mirror E/Trace﹕ error opening trace file: No such file or directory (2) 11-06 17:41:36.434 7906-7906/com.morristaedt.mirror W/ActivityThread﹕ Application com.morristaedt.mirror can be debugged on port 8100... 11-06 17:41:36.594 7906-7906/com.morristaedt.mirror D/AndroidRuntime﹕ Shutting down VM 11-06 17:41:36.594 7906-7906/com.morristaedt.mirror W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40cee2a0) 11-06 17:41:36.594 7906-7906/com.morristaedt.mirror E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.morristaedt.mirror/com.morristaedt.mirror.SetUpActivity}: java.lang.IllegalArgumentException: provider==null at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) at android.app.ActivityThread.access$600(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalArgumentException: provider==null at android.location.LocationManager.getLastKnownLocation(LocationManager.java:1165) at com.morristaedt.mirror.SetUpActivity.setUpLocationMonitoring(SetUpActivity.java:113) at com.morristaedt.mirror.SetUpActivity.onCreate(SetUpActivity.java:81) at android.app.Activity.performCreate(Activity.java:5008) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1089) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)             at android.app.ActivityThread.access$600(ActivityThread.java:130)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)             at android.os.Handler.dispatchMessage(Handler.java:99)             at android.os.Looper.loop(Looper.java:137)             at android.app.ActivityThread.main(ActivityThread.java:4745)             at java.lang.reflect.Method.invokeNative(Native Method)             at java.lang.reflect.Method.invoke(Method.java:511)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)             at dalvik.system.NativeStart.main(Native Method) 11-06 17:41:36.674 7906-7908/com.morristaedt.mirror D/dalvikvm﹕ GC_CONCURRENT freed 258K, 6% free 6179K/6535K, paused 2ms+1ms, total 70ms

    opened by Rob000 1
  • App has stopped when starting

    App has stopped when starting

    Help me please, How can I fixed this? (using android studio 1.2 with emulator of Nexus 7 API 5.0)

    Error at AsyncTask

    Log: 09-14 00:29:01.031 3242-3260/com.morristaedt.mirror E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 Process: com.morristaedt.mirror, PID: 3242 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.IllegalStateException: Error handler returned null for wrapped exception. at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:244) at java.lang.reflect.Proxy.invoke(Proxy.java:397) at $Proxy0.getHourlyForecast(Unknown Source) at com.morristaedt.mirror.modules.ForecastModule$1.doInBackground(ForecastModule.java:50) at com.morristaedt.mirror.modules.ForecastModule$1.doInBackground(ForecastModule.java:31) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237)             at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)             at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)             at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)             at java.lang.Thread.run(Thread.java:818) Caused by: retrofit.RetrofitError: 403 Forbidden at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:388) at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240)             at java.lang.reflect.Proxy.invoke(Proxy.java:397)             at $Proxy0.getHourlyForecast(Unknown Source)             at com.morristaedt.mirror.modules.ForecastModule$1.doInBackground(ForecastModule.java:50)             at com.morristaedt.mirror.modules.ForecastModule$1.doInBackground(ForecastModule.java:31)             at android.os.AsyncTask$2.call(AsyncTask.java:288)             at java.util.concurrent.FutureTask.run(FutureTask.java:237)             at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)             at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)             at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)             at java.lang.Thread.run(Thread.java:818)

    opened by phuexzy 1
  • Feature request: Face detection

    Feature request: Face detection

    Toggle display visibility when faces are detected using the new Mobile Vision API from Google Play Services.

    Assert "positive affirmations" when a sad face is detected.

    opened by akodiakson 1
  • Only particular  phones can achieve the effect ?

    Only particular phones can achieve the effect ?

    Only a particular phone can achieve the effect ? I removed the following part of the codebecause the problem of the network ,

    buildscript { repositories { maven { url 'https://maven.fabric.io/public' } }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
    

    }

    Run successfully but only on the phone screen appeared the effect?

    opened by walkthehorizon 0
  • StringsRU

    StringsRU

    Hello, my friend asked me to translate this thing to Russian language, so I translated strings to russian. Could you please allow me to try this thing out.

    opened by AlexProgrammer1 1
  • Not showing all

    Not showing all

    Hi, I have tried using my tablet and that just shows date and time and headlines. When I use my phone it just shows date, time and headlines and face recognition. I have made sure all tabs are ticked, but still doesn’t work fully. Any suggests?

    opened by stillmore 1
  • Why the mood detection function doesn't work?

    Why the mood detection function doesn't work?

    Hello, I used your app last year, it's awesome. But recently I found the mood detection function couldn't work anymore. Do you know the reason? Thank you!

    opened by YouyiWei 0
  • Gradle Project Refresh Error

    Gradle Project Refresh Error

    I receive this error in Android Studio 3.0.1: Is this safe to ignore? Or do I need to edit some Gradle settings to get this project to work with newer versions of Android Studio?

    image

    opened by kaptainkommie 0
Owner
Hannah Mittens Morrison
Staff Software Engineer @ MailChimp
Hannah Mittens Morrison
The Android Trivia application is an application that asks the user trivia questions about Android development

The Android Trivia application is an application that asks the user trivia questions about Android development. It makes use of the Navigation component within Jetpack to move the user between different screens. Each screen is implemented as a Fragment. The app navigates using buttons, the Action Bar, and the Navigation Drawer.

Srihitha Tadiparthi 1 Feb 10, 2022
Android application compatible with ZX2C4's Pass command line application

Password Store Download Documentation We're in the process of rewriting our documentation from scratch, and the work-in-progress state can be seen her

Android Password Store 2.2k Jan 8, 2023
Android Phishing Application.This Project is for Educational purposes only.The Developer of this application is not responsible of any bad usage

Android Phishing Application.This Project is for Educational purposes only.The Developer of this application is not responsible of any bad usage

Aria Shirazi 93 Oct 23, 2022
Math World is an Android Application specialized in mathematics, where the application includes some sections related to arithmetic, unit conversion, scientific math laws and constants, as well as some mathematical questions that need some intelligence to reach the solution.

Math World is an Android Application specialized in mathematics, where the application includes some sections related to arithmetic, unit conversion, scientific math laws and constants, as well as some mathematical questions that need some intelligence to reach the solution.

null 7 Mar 12, 2022
Realtime SOS Android Application. Location (GPS + Cellular Network) tracing application by alerting guardians of the User.

WomenSaftey Women Safety Android Application: Realtime SOS Android Application. Designed a Location (GPS + Cellular Network) tracing application by al

jatin kasera 6 Nov 19, 2022
Connect is an Android Application to connect people for a project and can then work on the application to efficiently complete the project

Connect is an Android Application to connect people for a project and can then work on the application to efficiently complete the project

Shubhaprasad Padhy 1 Jan 9, 2022
A blogging mobile application built with Kotlin using MVC design pattern and Take some advantage of Jetpack , View & Data Binding It's a mimic for Tumblr application , But a little prettier than him 😉

A blogging mobile application built with Kotlin using MVC design pattern and Take some advantage of Jetpack , View & Data Binding It's a mimic for Tum

Ahmed Ihab 17 Dec 23, 2022
Quiz-Application - A quiz application which uses opentdb api to get quiz of different levels like Easy Hard and Medium

Quiz-Application A quiz application which uses opentdb api to get quiz of differ

Pranat Praveer 2 Jan 25, 2022
Application: SLA report This application calculates, based on an input, the average duration per service of Axon.

Application: SLA report This application calculates, based on an input, the average duration per service of Axon.

null 3 Aug 5, 2022
A mobile application that allows you to get random information every time you enter the application.

Knowledge Repository A mobile application that allows you to get random information every time you enter the application. Google Play Store : Screensh

Nisa Efendioğlu 2 Jul 10, 2022
AppUI Sample Application - display how you can create your own custom AppUI application within a few minutes

AppUI Sample Application This is an open-source project to display how you can create your own custom AppUI application within a few minutes. I have a

Formaloo 5 Sep 5, 2022
A dummy application used for POC for Future of Furniture application using AR serivces provided by Google.

Furture A dummy application used for POC for Future of Furniture application using AR serivces provided by Google. Demo video.mp4 Splash Home Sofa Cha

Kapil Yadav 8 Nov 28, 2022
Shreyas Patil 2.1k Dec 30, 2022
A simple Android app to demonstrate the use of Hover SDK for M-PESA Send Money while offline. This SDK does not require an internet connection, it automates USSD sessions in the background of an android application.

HoverSDKDemo Hover SDK is an Android SDK that lets mobile developers to add money features to the applications. This SDK does not require an internet

Joel Kanyi 9 Dec 21, 2022
A Simple and Minimal Quotes Android Application to demonstrate the Modern Android Development tools

Quotee Android ?? A Simple and Minimal Quotes Android Application to demonstrate the Modern Android Development tools. Developed with ❤️ by Aminullah

null 12 Aug 24, 2022
🎥 A Simple and Minimal Movies Android Application to demonstrate the Modern Android Development and Jetpack Compose.

ComposeMovie Android ?? A Simple and Minimal Movies Android Application to demonstrate the Modern Android Development and Jetpack Compose. Built with

null 13 Oct 1, 2022
GmailCompose is an Android application 📱 for showcasing Jetpack Compose for building declarative UI in Android.

GmailCompose GmailCompose Demo GmailCompose is an Android application ?? for showcasing Jetpack Compose for building declarative UI in Android. About

Baljeet Singh 35 Nov 29, 2022
android-trinity is tiny proactive framework with much of the scaffolding code required to start a new Android Application.

android-trinity This is tiny framework with much of the scaffolding code (with some nice utilities and prepared source code) required to start a new A

Fernando Cejas 49 Nov 24, 2022